欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > [蓝桥杯 2022 省 B] 李白打酒加强版

[蓝桥杯 2022 省 B] 李白打酒加强版

2025/4/15 16:33:03 来源:https://blog.csdn.net/2202_75344116/article/details/147105288  浏览:    关键词:[蓝桥杯 2022 省 B] 李白打酒加强版

题目链接:

思路:

①定义dp数组,f[i][j][k],表示经过 i 店, 遇到 j 花, 还有 k 酒。如果酒的数量超过了花的数量,那么一定喝不完。因此,k 不能超过 M。

②从店推过来,f[i][j][k] += f[i-1][j][k/2],要保证 i-1 和 k/2 符合,所以 i >= 1 并且 k 能被2整除。

③从花推过来,f[i][j][k] += f[i][j-1][k+1],要保证 j-1 和 k+1 符合,所有 j >= 1并且 k >= -1(省略,k一定大于0)。

④题目规定最后一定遇到花,并且刚好喝完酒,因此,输出 f[n][m-1][1]。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 110, MOD = 1e9+7;int n, m;
//dp数组
//表示经过i家店 j躲花 还剩下 k 酒
int f[N][N][N];signed main(){cin >> n >> m;//根据题意 初始化f[0][0][2] = 1;for(int i = 0; i <= n; i++){for(int j = 0; j <= m; j++){for(int k = 0; k <= m; k++){//店if(i && (k%2==0)){f[i][j][k] += f[i-1][j][k/2];f[i][j][k] %= MOD;}if(j){f[i][j][k] += f[i][j-1][k+1];f[i][j][k] %= MOD;}}}}cout << f[n][m-1][1] << endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词