编程之美-数组分割

  编程之美'数组分割'和扩展

将一个数组划分成两个子数组,要求他们的和最接近
1.长度要求相等的情况: 
2.长度没有要求的情况:

都能用动态规划解决


#include
#include
using namespace std;


void ArraySplit1(int a[], int n)//两个子数组长度要求相等
{
	int dp[20][20][200]; //k:当前元素   i:元素个数  j:元素和
	
	int sum=0;
		
	for(int k=0; k= 0)
					dp[k][i][j] = k;  
				else if(k>i)
					dp[k][i][j] = dp[k-1][i][j];
				else
					dp[k][i][j] = -1;  
			}
	
	int k=n;				
	int i=n/2;
	int j=sum/2;
	while(dp[k][i][j] <0 )
		j--;		
	
	int part = 0;
	while(i>0)
	{
		if(dp[k][i][j] == k)
		{
			cout< 0)
		{
			--k;
		}
	}
	cout<=a[k-1] && dp[k-1][j-a[k-1]]>=0)
				dp[k][j] = k;
			else
				dp[k][j] = dp[k-1][j];
		}
	}
	
	int j=sum/2;
	int k=n;
	while(dp[k][j] < 0)
		j--;
	
	int part=0;
	while(k>0)
	{
		if(dp[k][j] == k)
		{
			cout<

你可能感兴趣的:(算法,动态规划)