完全背包问题
code:
#includeusing namespace std;int dp[3][1000001];struct chicken{ int price; int summ;};int max(int a,int b){ if(a>b) { return a; } return b;}int main(int argc, char *argv[]){ int t; scanf("%d",&t); while(t--) { int m; scanf("%d",&m); chicken c[3]; int i; for(i=1;i<=2;i++) { scanf("%d%d",&c[i].price,&c[i].summ); } memset(dp,0,sizeof(dp)); //dp初始化 int j,k; for(i=1;i<=2;i++) //第i个的最大值 { if(c[i].price>c[i-1].price&&c[i].summ =0;k--) //当前金钱最多买k个i种物品 { if(j>=k*c[i].price) //能够买下该物品 { dp[i][j]=max(dp[i][j],dp[i-1][j-k*c[i].price]+k*c[i].summ); //该价格下能买的最大东西 }else { dp[i][j]=dp[i-1][j]; //不能买下该物品 } } } } int maxx=-1; int i2; for(i2=1;i2<=m;i2++) { if(maxx