您的位置:首页 > 其它

HDU 4701 - Game

2014-10-01 15:27 337 查看
题目大意是:有N个物品,每个物品有Ci个价值,ALICE和BOB分别有A, B元钱,依次购买(即买第i个物品前i-1物品必须买完),直到有一人无法购买。问ALICE是否有必胜策略。

博弈论和DP结合,具体见代码:

/*
ID:esxgx1
LANG:C++
PROG:hdu4701
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

int _s[1000007], *s = &_s[1];
int dp[1000007];

int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif

int N, A, S;
while(scanf("%d%d%d", &N, &A, &S) > 0) {
S += A;
s[-1] = 0;
for(int i=0; i<N; ++i) {
int a;
scanf("%d", &a);
s[i] = s[i-1] + a;
}
/* O(n2)
for(int i=N; i--; ) {
dp[i] = s[N-1] - s[i-1];
for(int j = i+1; j<N; ++j)
dp[i] = min(dp[i], max(s[j-1] - s[i-1], S - s[i-1] - dp[j] + 1));
}*/
int minn = s[N-1];
for(int i=N; i--; ) {
dp[i] = min(s[N-1], minn) - s[i-1];
minn = min(minn, max(s[i-1], S - dp[i] + 1));
}
printf(A >= dp[0] ? "ALICE\n": "BOB\n");
}
return 0;
}


2014-10-01 15:20:55Accepted4701453MS8124K662 BG++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: