题意:汶川地震买大米
分析:裸多重背包,这题数据比较小所以可以三重循环不需要优化
代码:
#include<iostream> #include<cstring> using namespace std; int dp[1000][1000],t,n,m; int p[1000],h[1000],c[1000]; int max(int a,int b) { return a>b?a:b; } int main() { cin>>t; while(t--){ memset(dp,0,sizeof(dp)); cin>>n>>m; for(int i=0;i<m;i++) cin>>p[i]>>h[i]>>c[i]; for(int i=1;i<=n;i++) for(int j=0;j<=c[0];j++) if(j*p[0]<=i) dp[0][i]=max(dp[0][i-1],j*h[0]); for(int i=1;i<m;i++){ for(int j=0;j<=n;j++){ for(int k=0;k<=c[i];k++){ if(j>=k*p[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-k*p[i]]+k*h[i]); } } } cout<<dp[m-1][n]<<endl; } }
时间: 2024-11-26 08:45:20