码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ - 1880 Tug of War

时间:2014-05-11 05:02:03      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   int   

题意:求在两边人数不相差超过1个的情况下,实力尽量相等的情况

思路:从实力和的一半开始类背包操作

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 45010;
const int MAXM = 110;

int a[MAXM];
int dp[MAXN][MAXM];
int n;

int main(){
	int t,flag = 0;
	while (scanf("%d", &n) != EOF){
		int r = n/2;
		if (n & 1)
			r++;
		int sum = 0;
		for (int i = 0; i < n; i++){
			scanf("%d", &a[i]);
			sum += a[i];
		}
		memset(dp,0,sizeof(dp));
		dp[0][0] = 1;
		for (int i = 0; i < n; i++)
			for (int j = sum/2; j >= a[i]; j--)
				for (int k = r; k >= 1; k--)
					if (dp[j-a[i]][k-1])
						dp[j][k] = 1;
		int ans = 0;
		for (int i = sum/2; i >= 0; i--){
			if (n%2 == 0){
				if (dp[i][r]){
					ans = i;
					break;
				}
			}
			if (n%2 == 1){
				if (dp[i][r] || dp[i][r-1]){
					ans = i;
					break;
				}
			}
		}
		printf("%d %d\n", ans, sum-ans);
	}
	return 0;
}



ZOJ - 1880 Tug of War,布布扣,bubuko.com

ZOJ - 1880 Tug of War

标签:style   blog   class   code   c   int   

原文地址:http://blog.csdn.net/u011345136/article/details/25487277

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!