今天才算是把多进程的原理搞清楚了.....
双进程类问题
#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; }