标签:
题目链接
http://acm.split.hdu.edu.cn/showproblem.php?pid=5410
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #define eps 1e-8 #define maxn 105 #define inf 0x3f3f3f3f3f3f3f3f #define IN freopen("in.txt","r",stdin); using namespace std; int dp[2005]; int vis[2005][1005]; int kind[1005][3]; int main() { int T; int M,N; cin>>T; while(T--) { scanf("%d%d",&M,&N); for(int i=0;i<N;i++) scanf("%d%d%d",&kind[i][0],&kind[i][1],&kind[i][2]); memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); for(int i=1;i<=M;i++) { int flag=-1; for(int j=0;j<N;j++) { if(i<kind[j][0]) continue; int s=dp[i-kind[j][0]]+kind[j][1]; if(!vis[i-kind[j][0]][j]) s+=kind[j][2]; if(dp[i]<s) { dp[i]=s; flag=j; } } if(flag>=0) { for(int j=0;j<N;j++) { vis[i][j]=vis[i-kind[flag][0]][j]; } vis[i][flag]++; } } int tmp=0; for(int i=1;i<=M;i++) tmp=max(tmp,dp[i]); printf("%d\n",tmp); } return 0; }
2015暑假多校联合---CRB and His Birthday(01背包)
标签:
原文地址:http://www.cnblogs.com/chen9510/p/5835592.html