标签:
1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
2200
1 /****************************** 2 code by drizzle 3 blog: www.cnblogs.com/hsd-/ 4 ^ ^ ^ ^ 5 O O 6 ******************************/ 7 #include<bits/stdc++.h> 8 #include<iostream> 9 #include<cstring> 10 #include<cstdio> 11 #include<map> 12 #include<algorithm> 13 #include<queue> 14 #define ll __int64 15 using namespace std; 16 int n,m; 17 int a,b,c; 18 struct node 19 { 20 int w; 21 int s; 22 int w1,s1; 23 int w2,s2; 24 } N[65]; 25 int used[65]; 26 int dp[32005]; 27 int main() 28 { 29 memset(used,0,sizeof(used)); 30 memset(N,0,sizeof(N)); 31 memset(dp,0,sizeof(dp)); 32 scanf("%d %d",&n,&m); 33 for(int i=1; i<=m; i++) 34 { 35 scanf("%d %d %d",&a,&b,&c); 36 if(c==0) 37 { 38 N[i].w=a; 39 N[i].s=b; 40 } 41 else 42 { 43 if(used[c]==0) 44 { 45 N[c].w1=a; 46 N[c].s1=b; 47 used[c]=1; 48 } 49 else 50 { 51 N[c].w2=a; 52 N[c].s2=b; 53 } 54 } 55 } 56 for(int i=1; i<=m; i++) 57 { 58 for(int k=n; k>=0; k--) 59 { 60 if(k>=(N[i].w+N[i].w1+N[i].w2)) 61 dp[k]=max(dp[k],dp[k-(N[i].w+N[i].w1+N[i].w2)]+N[i].w*N[i].s+N[i].w1*N[i].s1+N[i].w2*N[i].s2); 62 if(k>=(N[i].w+N[i].w1)) 63 dp[k]=max(dp[k],dp[k-(N[i].w+N[i].w1)]+N[i].w*N[i].s+N[i].w1*N[i].s1); 64 if(k>=(N[i].w+N[i].w2)) 65 dp[k]=max(dp[k],dp[k-(N[i].w+N[i].w2)]+N[i].w*N[i].s+N[i].w2*N[i].s2); 66 if(k>=N[i].w) 67 dp[k]=max(dp[k],dp[k-N[i].w]+N[i].w*N[i].s); 68 } 69 } 70 cout<<dp[n]<<endl; 71 return 0; 72 }
标签:
原文地址:http://www.cnblogs.com/hsd-/p/5758327.html