#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int w[200],f[35][20005];
int main() {
int t,m;
cin>>t>>m;
for(int i=1;i<=m;i++)
cin>>w[i];
for(int i=1;i<=m;i++){
for(int j=1;j<=t;j++){
if(j>=w[i]&&f[i-1][j-w[i]]+w[i]<=t)
f[i][j]=max(f[i-1][j-w[i]]+w[i],f[i-1][j]);
else
f[i][j]=f[i-1][j];
}
}
cout<<t-f[m][t]<<endl;
return 0;
}
vijos 1133 装箱问题(简单01背包)
最新推荐文章于 2020-12-13 20:45:21 发布
本文通过C++代码解决了一个典型的0-1背包问题,利用动态规划的方法实现了物品的选择以达到最大的效益值。代码中详细展示了如何初始化数组以及更新状态转移方程的过程。
449

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



