记录编号 48663 评测结果 AAAAAAAAAAAAWWW
题目名称 二十一点 最终得分 80
用户昵称 Gravatar王者自由 是否通过 未通过
代码语言 C++ 运行时间 0.045 s
提交时间 2012-11-06 12:59:50 内存使用 1.97 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1000 + 10;
int n, k, p[N], f[N];
bool Play(int x, int y) {
    int s = p[x] + p[x+2], t = p[x+1] + p[x+3], i = x+4;
    bool u = 1, v = 1; k = i;
    if(s > 21) return 1;
    if(t > 21) return 0;
    while(i <= n && (u || v)) {
        if(s <= 16) {
            s += p[i]; i++; k = i;
            if(s > 21) return 1;
        } else u = 0;
        if(i > y) v = 0;
        if(i <= n && v) {
            t += p[i]; i++; k = i;
            if(t > 21) return 0;
        }
    } return s < t;
}
int main() {
    freopen("jack.in", "r", stdin);
    freopen("jack.out", "w", stdout);
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
        scanf("%d", p+i);
    for(int i=n-5; i>=1; i--)
        for(int j=i+3; j<=n; j++)
            f[i] = max(f[i], Play(i, j) + f[k]);
    printf("%d\n", f[1]);
    return 0;
}