完全背包

来源:互联网 发布:java中调用webservice 编辑:程序博客网 时间:2024/06/04 23:24
#include<iostream>#include<sstream>#include<string>#include<vector>#include<list>#include<set>#include<map>#include<stack>#include<queue>#include<algorithm>#pragma warning(disable:4996)using std::cin;using std::cout;using std::endl;using std::stringstream;using std::string;using std::vector;using std::list;using std::pair;using std::set;using std::multiset;using std::map;using std::multimap;using std::stack;using std::queue;using std::priority_queue;int main(){//freopen("input.txt", "r", stdin);  //freopen("output.txt", "w", stdout);  int n, m;//商品的个数以及背包的容量while (cin >> n>>m){//item.first表示该商品的价值,item.second表示该商品的重量vector<pair<int, int>>item(n);for (int i = 0; i < n; i++){cin  >> item[i].first >> item[i].second;}//dp[i]表示重量恰好为i时的最大价值vector<int>dp(m + 1);for (int i = 0; i < n; i++){dp[item[i].second] = std::max(dp[item[i].second],item[i].first);for (int j = 1; j <= m; j++){if (dp[j] && j + item[i].second <= m){dp[j + item[i].second] = std::max(dp[j + item[i].second], dp[j]+item[i].first);}}}int index = 0;for (int i = 0; i <= m; i++){index = dp[index] > dp[i] ? index : i;}cout << dp[index] << endl;}return 0;}

0 0