标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 247 Accepted Submission(s): 101
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 #define MIN(x,y)(x<y?x:y) 6 #define MAX(x,y)(x>y?x:y) 7 const int INF=0x3f3f3f3f; 8 using namespace std; 9 struct Node{ 10 int a,b,c; 11 void in(){ 12 scanf("%d%d%d",&a,&b,&c); 13 } 14 friend bool operator <(Node a,Node b){ 15 return a.b*b.c>a.c*b.b; 16 } 17 }; 18 Node dt[1010]; 19 int bag[3010]; 20 int main(){ 21 int T,n,t; 22 scanf("%d",&T); 23 while(T--){ 24 scanf("%d%d",&n,&t); 25 for(int i=0;i<n;i++){ 26 dt[i].in(); 27 } 28 sort(dt,dt+n); 29 memset(bag,0,sizeof(bag)); 30 for(int i=0;i<n;i++){ 31 for(int j=t;j>=dt[i].c;j--){ 32 bag[j]=MAX(bag[j],bag[j-dt[i].c]+dt[i].a-j*dt[i].b); 33 } 34 } 35 int max=0; 36 for(int i=0;i<=t;i++)max=MAX(max,bag[i]); 37 printf("%d\n",max); 38 } 39 return 0; 40 }
明知道暴力肯定超时,还是写了下;
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<queue> 5 #define MIN(x,y)(x<y?x:y) 6 #define MAX(x,y)(x>y?x:y) 7 const int INF=0x3f3f3f3f; 8 using namespace std; 9 int n,t,ans; 10 int vis[1010]; 11 struct Node{ 12 int a,b,c; 13 }; 14 Node dt[1010]; 15 void dfs(int time,int score){ 16 if(time>t)return; 17 ans=MAX(ans,score); 18 for(int i=0;i<n;i++){ 19 if(vis[i])continue; 20 vis[i]=1; 21 dfs(time+dt[i].c,score+dt[i].a-dt[i].b*(time+dt[i].c)); 22 vis[i]=0; 23 } 24 } 25 int main(){ 26 int T; 27 scanf("%d",&T); 28 while(T--){ 29 scanf("%d%d",&n,&t); 30 for(int i=0;i<n;i++){ 31 scanf("%d%d%d",&dt[i].a,&dt[i].b,&dt[i].c); 32 } 33 memset(vis,0,sizeof(vis)); 34 ans=0; 35 dfs(0,0); 36 printf("%d\n",ans); 37 } 38 return 0; 39 }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4868957.html