题解:
简单dp
代码:
#include<bits/stdc++.h> using namespace std; const int N=1005; int n,x,m,a[N],f[N][N]; int main() { scanf("%d%d%d",&n,&x,&m); for (int i=1;i<=n;i++)scanf("%d",&a[i]); f[0][x]=1; for (int i=1;i<=n;i++) for (int j=0;j<=m;j++) { if (j+a[i]<=m&&f[i-1][j+a[i]])f[i][j]=1; if (j-a[i]>=0&&f[i-1][j-a[i]])f[i][j]=1; } for (int i=m;i>=0;i--) if (f[n][i]){printf("%d",i);return 0;} printf("-1"); return 0; }
本文介绍了一种使用动态规划(DP)解决背包问题的方法。通过一个具体的编程实例,详细展示了如何利用DP算法来找到最优解,特别是在处理背包容量限制下的物品选择问题上。代码采用C++实现,通过迭代更新状态矩阵,最终输出最大价值或最优配置。
390

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



