【背包总结】【输出最优解时候的最小质量】

来源:互联网 发布:java联机游戏代码实现 编辑:程序博客网 时间:2024/06/04 20:08
#include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;    int n,tot;const int N = 10;const int M = 1000;int dp[M + 1];int m[M + 1];int v[N];int w[N];int main(){     while(scanf("%d%d",&n,&tot) != EOF){memset(dp,0,sizeof(dp));memset(m,0,sizeof(m));for(int i=0;i<n;i++){   scanf("%d%d",&w[i],&v[i]);}for(int i=0;i<n;i++){for(int j=tot;j>=w[i];j--){dp[j] = max(dp[j-w[i]]+v[i],dp[j]);}}int maxs = dp[tot];for(int j=tot;j>=0;j--){if(dp[j] == maxs){cout << j << endl;break;}}for(int j=0;j<=tot;j++){if(dp[j] == maxs){cout << j << endl;break;}}cout << dp[tot] << endl;}    return 0;}

0 0