这道题也是傻逼得一批
#include <bits/stdc++.h>
using namespace std;
const int N=55;
const int M=1005;
int n,b,m;
int c[N],f[N][M];
int main() {
scanf("%d%d%d",&n,&b,&m);
f[0][b]=1;
for(int i=1;i<=n;i++) scanf("%d",&c[i]);
for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) {
if(j+c[i]<=m) f[i][j+c[i]]|=f[i-1][j];
if(j-c[i]>=0) f[i][j-c[i]]|=f[i-1][j];
}
for(int i=m;i>=0;i--) if(f[n][i]) {
printf("%d",i);return 0;
}
puts("-1");
return 0;
}
本文介绍了一种使用C++实现动态规划算法解决背包问题的方法。通过一个具体的例子,详细展示了如何初始化二维数组,迭代计算并最终找到最优解。代码中包括了输入物品价值、容量限制以及目标值的过程,通过双重循环更新状态矩阵来实现求解。

388

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



