题目大意:给许多硬币,分给三个人,要求输出拿钱最多者与拿钱最少者差的最小值。
解题策略:思路同Dividing Coins,定义二维数组dp[i][j],表示第一个人拿i钱,第二个人拿j钱,第三个人呢?当然硬币总和(sum)-i-j,
当前方案可施行,dp=1,否则为0,运用减唯的思想;
/*
UVA 10482 The Candyman Can
AC by J.Dark
ON 2013/3/29
Time 0.192s
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int coinmaxn = 35;
const int maxn = 650;
int coinNum, sum, coin[coinmaxn];
int value[maxn][maxn];
void input(){
sum = 0;
for(int i=1; i<=coinNum; i++){
cin >> coin[i];
sum += coin[i];
}
}
//返回每组分配方案拿钱最多-拿钱最少
int searchMin(int a, int b, int c){
return max(max(a,b), c)- min(min(a,b), c);
}
in