HDU2194 二维完全背包

来源:互联网 发布:java 版本 编辑:程序博客网 时间:2024/06/06 01:52

之前还没碰到过二维的,不过和一维方法类似,主要搞清楚每一个物品会导致哪个量变化,会受哪些量限制,限直的量就当作背包容量

#include<iostream>#include<algorithm>#define MAX 101using namespace std;int dp[MAX][MAX] ,c[MAX],w[MAX];//dp为j点忍耐值,x次可以获得的最大经验int main(){int n, m, k, s;while (cin >> n >> m >> k >> s){memset(dp, 0, sizeof(dp));for (int i = 0; i < k; i++)cin >> c[i] >> w[i];for (int i = 0; i < k; i++)for (int j = w[i]; j <= m; j++)for (int x = 1; x <= s;x++)dp[j][x] = max(dp[j][x],dp[j-w[i]][x-1]+c[i]);int cnt, flag=0;for (cnt = 0; cnt <= m; cnt++){if (dp[cnt][s] >= n){flag = 1;break;}}if (flag)cout << m - cnt<<endl;elsecout << "-1" << endl;}}

另外为什么初始化设0的时候过不了-  -bug吗

0 0