完全背包

完全背包就是可以不限次数的放

一维dp

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5 int dp[120];
 6 int value[1100];
 7 int popular[1100];
 8 int main()
 9 {
10     int n,m;
11     cin>>m>>n;
12     for(int i=1;i<=n;i++)
13     {
14         cin>>value[i]>>popular[i];
15     }
16     for(int i=1;i<=n;i++)
17         for(int j=value[i];j<=m;j++)
18             dp[j]=max(dp[j],dp[j-value[i]]+popular[i]);
19     cout<<dp[m]<<endl;
20     return 0;
21 }

二维dp

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5 int dp[120][1100];
 6 int value[1100];
 7 int popular[1100];
 8 int main()
 9 {
10     int n,m;
11     cin>>m>>n;// m为最大容量,n为件数
12     for(int i=1;i<=n;i++)
13     {
14         cin>>value[i]>>popular[i];
15     }
16     for(int i=1;i<=n;i++)
17     {
18         for(int j=1;j<=value[i];j++)
19         {
20             dp[i][j]=dp[i-1][j];
21         }
22         for(int j=value[i];j<=m;j++)
23             dp[i][j]=max(dp[i-1][j],dp[i][j-value[i]]+popular[i]);
24     }
25     cout<<dp[n][m]<<endl;
26     return 0;
27 }
原文地址:https://www.cnblogs.com/Iwpml-595/p/10680526.html