标签:des pre val 整数 打印机 最大 scanf cin view
主件 | 附件 |
电脑 | 打印机,扫描仪 |
书柜 | 图书 |
书桌 | 台灯,文具 |
工作椅 | 无 |
#include <iostream> #include <cstdio> #include <vector> #include <queue> #include <map> #include <cmath> #include <stack> #include <cstring> #include <algorithm> #include <cstdlib> #define FOR(i,x,n) for(long i=x;i<n;i++) #define ll long long int #define INF 0x3f3f3f3f #define MOD 1000000007 #define MAX_N 50005 using namespace std; int dp[66][42005]={0}; int value[66][3]={0}; int spend[66][3]={0}; int main() { //freopen("input1.txt", "r", stdin); //freopen("data.out", "w", stdout); int n,m; int v,p,q; scanf("%d %d",&n,&m); FOR(i,1,m+1){ scanf("%d %d %d",&v,&p,&q); if(q==0){ value[i][0]=v*p; spend[i][0]=v; }else{ FOR(j,1,3){ if(value[q][j]==0){ value[q][j]=v*p; spend[q][j]=v; break; } } } } memset(dp,0,sizeof(dp)); FOR(i,1,m+1){ FOR(j,1,n+1){ if(j>=spend[i][0]){ dp[i][j]=max(dp[i-1][j],dp[i-1][j-spend[i][0]]+value[i][0]); if(j>=(spend[i][0]+spend[i][1])){ dp[i][j]=max(dp[i][j],dp[i-1][j-spend[i][0]-spend[i][1]]+value[i][0]+value[i][1]); } if(j>=(spend[i][0]+spend[i][2])){ dp[i][j]=max(dp[i][j],dp[i-1][j-spend[i][0]-spend[i][2]]+value[i][0]+value[i][2]); } if(j>=(spend[i][0]+spend[i][1]+spend[i][2])){ dp[i][j]=max(dp[i][j],dp[i-1][j-spend[i][0]-spend[i][1]-spend[i][2]]+value[i][0]+value[i][1]+value[i][2]); } }else{ dp[i][j]=dp[i-1][j]; } } } printf("%d\n",dp[m][n]); //fclose(stdin); //fclose(stdout); return 0; }
标签:des pre val 整数 打印机 最大 scanf cin view
原文地址:http://www.cnblogs.com/TWS-YIFEI/p/6628717.html