今天才算是把多进程的原理搞清楚了.....
双进程类问题
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int num[1000000];
int f[2003][2003];
int sum[100000];
int main()
{
int n,m;
cin>>n;
for(int i=1;i<=n;i++)
{ cin>>num[i];sum[i]=num[i]+sum[i-1];}
f[0][0]=1;
int ans=-999;
for(int i=1;i<=n;i++)
for(int j=sum[i];j>=0;j--)
for(int h=sum[i];h>=0;h--)
{
{
if(j>=num[i])
if(f[j-num[i]][h]==1)f[j][h]=1;
if(h>=num[i])
if(f[j][h-num[i]]==1)f[j][h]=1;
if(j==h&&f[j][h]==1)ans=max(ans,j);
}
}//类似于01背包问题 只是变成了两维
if(ans==-999||ans==0){cout<<"Impossible"<<endl;return 0;}
cout<<ans<<endl;
return 0;
}