11002

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>

using namespace std;

bool dp[65][65][6005];
int arr[65][65];
int n;

void init()
{
	for(int i=0;i<65;i++)
		for(int j=0;j<65;j++)
		{
			arr[i][j]=0;
			for(int k=0;k<6005;k++)
				dp[i][j][k]=0;
		}
}


int main()
{
	int cnt,tmp,tmp2,val;
	while(scanf("%d",&n),n)
	{
		init();
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=i;j++)
				scanf("%d",&arr[i][j]);
		}
		cnt = n;
		for(int i=n+1;i<=2*n-1;i++)
		{
			cnt-=1;
			for(int j=1;j<=cnt;j++)
			{
				scanf("%d",&arr[i][j]);
			}
		}
		cnt = 0;
		dp[2*n-1][1][ arr[2*n-1][1]+3000 ] = 1;
		for(int i=2*n-1;i>=n+1;i--)
		{
			cnt+=1;
			for(int j=1;j<=cnt;j++)
			{
				for(int k=0;k<6005;k++)
				{
					if(dp[i][j][k]==true)
					{
						tmp = arr[i-1][j];
						val = k+tmp;
						dp[i-1][j][val]=true;
						val = k-tmp;
						dp[i-1][j][val]=true;
						tmp2 = arr[i-1][j+1];
						val = k+tmp2;
						dp[i-1][j+1][val]=true;
						val = k-tmp2;
						dp[i-1][j+1][val]=true;
					}
				}
			}
		}// end of for loop
		cnt=n+1;
		for(int i=n;i>=2;i--)
		{
			cnt-=1;
			for(int j=1;j<=cnt;j++)
			{
				for(int k=0;k<6005;k++)
				{
					if(dp[i][j][k]==true)
					{
						tmp = arr[i-1][j-1];
						tmp2 = arr[i-1][j];
						if(j==1)
						{
							val = k+tmp2;
							dp[i-1][j][val]=true;
							val = k-tmp2;
							dp[i-1][j][val]=true;
						}
						else if(j==cnt)
						{
							val = k+tmp;
							dp[i-1][j-1][val]=true;
							val = k-tmp;
							dp[i-1][j-1][val]=true;
						}
						else
						{
							val = k+tmp;
							dp[i-1][j-1][val]=true;
							val = k-tmp;
							dp[i-1][j-1][val]=true;
							val = k+tmp2;
							dp[i-1][j][val]=true;
							val = k-tmp2;
							dp[i-1][j][val]=true;
						}
					}
				}
			}
		}//end for loop
		int mn = 7000;
		for(int i=3000;i>=0;i--)
		{
			if(dp[1][1][i]==true)
			{
				mn=3000-i;
				break;
			}
		}
		int mx = 7000;
		for(int i=3001;i<6005;i++)
		{
			if(dp[1][1][i]==true)
			{
				mx=i-3000;
				break;
			}
		}
		cout<<(mn<mx?mn:mx)<<"\n";
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *