码迷,mamicode.com
首页 > 其他好文 > 详细

Goozy的积木

时间:2017-06-01 17:51:12      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:using   大牛   nbsp   应该   .com   span   img   std   log   

技术分享

技术分享

 

1.http://blog.csdn.net/Miracle_ma/article/details/51495549(大牛详解)

2.惭愧,想了很久也没想出来状态应该怎么表达。dp[2][|hA-hB|]:当A和B的高度之差为J时的所用的积木的高度。

3.滚动数组不是很明白。果然我很弱~~~

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 using namespace std;
 6 
 7 const int maxn=500005;
 8 
 9 int T,n;
10 int dp[2][maxn],a[55];
11 
12 int main()
13 {   scanf("%d",&T);
14     while(T--){
15         scanf("%d",&n);
16         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
17         memset(dp,-1,sizeof(dp));
18         dp[0][0]=0;
19         int cur=0;
20         for(int i=1;i<=n;i++){
21             cur^=1;
22             for(int j=0;j<=500000;j++){
23                 dp[cur][j]=max(dp[cur][j],dp[cur^1][j]);
24                 if(j+a[i]<=500000&&dp[cur^1][j+a[i]]!=-1) dp[cur][j]=max(dp[cur][j],dp[cur^1][j+a[i]]+a[i]);
25                 if(j-a[i]>=0&&dp[cur^1][j-a[i]]!=-1) dp[cur][j]=max(dp[cur][j],dp[cur^1][j-a[i]]+a[i]);
26                 if(j-a[i]<0&&dp[cur^1][a[i]-j]!=-1) dp[cur][j]=max(dp[cur][j],dp[cur^1][a[i]-j]+a[i]);
27             } 
28         }
29         if(dp[cur][0]==0) printf("GG\n");
30         else printf("%d\n",dp[cur][0]/2);
31     }
32     return 0;
33 }
34  

 

Goozy的积木

标签:using   大牛   nbsp   应该   .com   span   img   std   log   

原文地址:http://www.cnblogs.com/zgglj-com/p/6929756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!