cf 106C
题目链接:http://vjudge.net/contest/139376#problem/E
题意看注释就能懂了,求能获得的最大价值。
代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int dp[1005]; int n,m,p,q; ///n面粉的重量 m是stuff的种类,p是生产馒头需要的淀粉的质量,q是馒头能卖的钱数 /// m组数 剩下a g stuff need stuff b stuff c g面粉 价值d int main() { while(scanf("%d%d%d%d",&n,&m,&p,&q)==4) { memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) dp[i]=(i/p)*q; int a,b,c,d; for(int k=1; k<=m; k++) { scanf("%d%d%d%d",&a,&b,&c,&d); for(int i=1; i<=a/b; i++) for(int j=n; j>=c; j--) dp[j]=max(dp[j],dp[j-c]+d); } printf("%d\n",dp[n]); } return 0; }