标签:
vijosP1037搭建双塔
【思路】
DP。
【代码】
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 const int maxn = 100+10; 6 7 int a[maxn]; 8 int d[maxn][2010]; 9 int n,sum; 10 11 int main() { 12 ios::sync_with_stdio(false); 13 cin>>n; 14 for(int i=1;i<=n;i++) cin>>a[i] , sum+=a[i]; 15 16 memset(d,-1,sizeof(d)); 17 d[0][0]=0; 18 for(int i=1;i<=n;i++) 19 for(int j=0;j<=sum;j++) 20 { 21 if(d[i-1][j]>-1) 22 d[i][j]=d[i-1][j]; 23 if(a[i]>=j&&d[i-1][a[i]-j]>-1) 24 d[i][j]=max(d[i][j],d[i-1][a[i]-j]+j); 25 if(j+a[i]<=sum&&d[i-1][j+a[i]]>-1) 26 d[i][j]=max(d[i][j],d[i-1][j+a[i]]); 27 if(j>=a[i]&&d[i-1][j-a[i]]>-1) 28 d[i][j]=max(d[i][j],d[i-1][j-a[i]]+a[i]); 29 } 30 if(d[n][0]<=0) cout<<"Impossible"; 31 else cout<<d[n][0]; 32 33 return 0; 34 }
标签:
原文地址:http://www.cnblogs.com/lidaxin/p/4902705.html