标签:多重 威胁 out 过程 ace .com span ssl output
Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
Sample Input
1 8 2 2 100 4 4 100 2
Sample Output
400
题目分析:
外循环i大米种类,中间循环j经费,内循环k该大米数量,递推式即为:dp[j]=max(dp[j],dp[j-p[i]*k]+h[i]*k)。
#include <iostream> #include <cstring> using namespace std; int p[105],h[105],c[105],dp[105]; int n,m; int main() { int T; cin>>T; while(T--) { memset(dp,0,sizeof dp); cin>>n>>m; for(int i=1;i<=m;i++) cin>>p[i]>>h[i]>>c[i]; for(int i=1;i<=m;i++) for(int j=n;j>=0;j--) for(int k=1;k<=c[i];k++) if(j>=p[i]*k) dp[j]=max(dp[j],dp[j-p[i]*k]+h[i]*k); cout<<dp[n]<<‘\n‘; } return 0; }
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(部分背包)
标签:多重 威胁 out 过程 ace .com span ssl output
原文地址:https://www.cnblogs.com/zdragon1104/p/9188963.html