完全背包就是可以不限次数的放
一维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 }