题目链接:
思路:其实就是多重背包的应用,只是这里价值和重量是相等的,因此最后计数是要计价值和重量相等的个数;
View Code
1 #include2 #include 3 const int N=100010; 4 using namespace std; 5 int n,m; 6 7 struct Node{ 8 int value; 9 int number;10 }node[N/100];11 int dp[N];12 13 //完全背包14 void CompletePack(int value){15 for(int i=value;i<=m;i++){16 dp[i]=max(dp[i],dp[i-value]+value);17 }18 }19 20 //01背包21 void ZeroOnePack(int value){22 for(int i=m;i-value>=0;i--){23 dp[i]=max(dp[i],dp[i-value]+value);24 }25 }26 27 //多重背包28 void MultiplePack(int value,int number){29 //如果>=m,就按完全背包处理30 if(value*number>=m){31 CompletePack(value);32 return ;33 }34 int k=1;35 while(k