zoj 2059
#include<iostream>
#include<fstream>
#include<memory.h>
using namespace std;
int n;
int a[101];
int dp[101][4004];
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n)
{
if(n<0) return;
if(n<=1)
{
cout<<"Sorry"<<endl;
continue;
}
for(i=1;i<=n;i++)
cin>>a[i];
memset(dp,-1,sizeof(dp));
dp[1][-a[1]+2000]=a[1];
dp[1][a[1]+2000]=a[1];
dp[1][2000]=0;
int ans=-1;
for(i=1;i<n;i++)
for(j=0;j<=4000;j++)
if(dp[i][j]>=0)
{
dp[i+1][j-a[i+1]]=max(dp[i+1][j-a[i+1]],dp[i][j]+a[i+1]);
dp[i+1][j+a[i+1]]=max(dp[i+1][j+a[i+1]],dp[i][j]+a[i+1]);
dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
}
if(dp[n][2000]>0) cout<<dp[n][2000]/2<<endl;
else
cout<<"Sorry"<<endl;
}
}
int main(){
read();
return 0;
}
#include<fstream>
#include<memory.h>
using namespace std;
int n;
int a[101];
int dp[101][4004];
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n)
{
if(n<0) return;
if(n<=1)
{
cout<<"Sorry"<<endl;
continue;
}
for(i=1;i<=n;i++)
cin>>a[i];
memset(dp,-1,sizeof(dp));
dp[1][-a[1]+2000]=a[1];
dp[1][a[1]+2000]=a[1];
dp[1][2000]=0;
int ans=-1;
for(i=1;i<n;i++)
for(j=0;j<=4000;j++)
if(dp[i][j]>=0)
{
dp[i+1][j-a[i+1]]=max(dp[i+1][j-a[i+1]],dp[i][j]+a[i+1]);
dp[i+1][j+a[i+1]]=max(dp[i+1][j+a[i+1]],dp[i][j]+a[i+1]);
dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
}
if(dp[n][2000]>0) cout<<dp[n][2000]/2<<endl;
else
cout<<"Sorry"<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号