dp【多进程】 zjoj p1315 构建双塔

今天才算是把多进程的原理搞清楚了.....

双进程类问题

#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;
}

  

原文地址:https://www.cnblogs.com/Lazers/p/6519682.html