当前位置: 代码迷 >> 编程 >> 9度教程第100题
  详细解决方案

9度教程第100题

热度:6209   发布时间:2013-02-26 00:00:00.0
九度教程第100题

题目地址:http://jobdu.sinaapp.com/problem.php?cid=1040&pid=99

C语言源码:

#include<stdio.h>#include<limits.h>#define maxsize 4010#define size 2000int dp[110][maxsize];int max2(int a,int b){	return a>b?a:b;}int max(int a,int b,int c){	return max2(a,b)>c?max2(a,b):c;}int a[1010];int main(){	int t,n,num,i,j,zero;	scanf("%d",&t);		for(num=1;num<=t;num++)		{			zero=0;			scanf("%d",&n);			j=1;			for(i=1;i<=n;i++)			{				scanf("%d",&a[j++]);				if(a[j-1]==0)				{					zero=1;					j--;				}			}			n=j-1;			for(i=0;i<110;i++)				for(j=0;j<maxsize;j++)					dp[i][j]=INT_MIN;			dp[0][size]=0;			for(i=1;i<=n;i++)				for(j=0;j<maxsize;j++)					if(j-a[i]>=0&&j+a[i]<maxsize)						dp[i][j]=max(dp[i-1][j-a[i]]+a[i],dp[i-1][j+a[i]]+a[i],dp[i-1][j]);					else					{						if(j-a[i]<0&&j+a[i]<maxsize)							dp[i][j]=max2(dp[i-1][j+a[i]]+a[i],dp[i-1][j]);						else							if(j+a[i]>=maxsize&&j-a[i]>=0)								dp[i][j]=max2(dp[i-1][j-a[i]]+a[i],dp[i-1][j]);							else								dp[i][j]=dp[i-1][j];					}			if(dp[n][size]==0&&zero==0)				printf("Case %d: -1\n",num);			else				printf("Case %d: %d\n",num,dp[n][size]/2);		}	}


  相关解决方案