1 条题解
-
0
这是一道简单的动规题,定义 为用前 道菜用光 元钱的办法总数,其状态转移方程如下:
(1)if(j==第i道菜的价格)f[i][j]=f[i-1][j]+1; (2)if(j>第i道菜的价格) f[i][j]=f[i-1][j]+f[i-1][j-第i道菜的价格]; (3)if(j<第i道菜的价格) f[i][j]=f[i-1][j];
说的简单一些,这三个方程,每一个都是在吃与不吃之间抉择。若钱充足,办法总数就等于吃这道菜的办法数与不吃这道菜的办法数之和;若不充足,办法总数就只能承袭吃前 道菜的办法总数。依次递推,在最后,我们只要输出 的值即可。
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int a[101], f[101][10001] = { 0 }; int main() { int n,m; cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; ++j) { if (j == a[i])f[i][j] = f[i - 1][j] + 1; if (j > a[i]) f[i][j] = f[i - 1][j] + f[i - 1][j - a[i]]; if (j < a[i]) f[i][j] = f[i - 1][j]; } } cout << f[n][m]; return 0; }
- 1
信息
- ID
- 129
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 98
- 已通过
- 16
- 上传者