#include<iostream>
using namespace std;
int N, M, a[1000], b[1000][10000];
int main()
{
cin >> N >> M;
for (int i = 1; i <= N; i++)
cin >> a[i];
b[0][0] = 1;
for (int i = 1; i <= N; i++)
for (int j = 0; j <= M; j++)
if (j >= a[i])
b[i][j] = b[i - 1][j - a[i]] + b[i - 1][j];
else
b[i][j] = b[i - 1][j];
cout << b[N][M];
return 0;
}
洛谷P1164 小A点菜进阶解法
本文通过C++代码详细展示了如何解决0-1背包问题。利用动态规划方法,该程序能够根据给定的物品数量和背包容量计算出最大价值。代码中使用了二维数组来存储中间结果,以避免重复计算。

被折叠的 条评论
为什么被折叠?



