- 搭建双塔
- 2017-07-13 08:57:03 @
#include <iostream>
#include <cmath>
using namespace std;
int h[10005];
int sum=0;
int dp[1005][1005];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>h[i];
sum+=h[i];
}
for(int i=0;i<=n;i++)
for(int j=0;j<=sum;j++)
dp[i][j]=-99999999;
dp[0][0]=0;
for(int i=1;i<=n;i++)
for(int j=sum;j>=0;j--)
{
dp[i][j]=max(dp[i][j],dp[i-1][j]);
dp[i][j]=max(dp[i][j],dp[i-1][j+h[i]]+h[i]);
dp[i][j]=max(dp[i][j],dp[i-1][abs(j-h[i])]);
}
if(dp[n][0]>0)
cout<<dp[n][0];
else
cout<<"Impossible";
return 0;
}
1 条评论
-
Administrator2004 LV 7 @ 2019-12-23 15:33:15
然后呢
- 1