社区讨论

本地运行没问题 评测机WA

P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lp98tqo9
此快照首次捕获于
2023/11/22 12:07
2 年前
此快照最后确认于
2023/11/22 16:32
2 年前
查看原帖
代码见下
CPP
//P1005_[NOIP2007 提高组] 矩阵取数游戏
#include <iostream>
using namespace std;
typedef unsigned long long ull;
int n, m, mat[81];
pair<ull, ull> ans, f[81][81];
pair<ull, ull> add_num(pair<ull, ull> num1, pair<ull, ull> num2)
{
    ull dig1, dig2;
    dig1 = num1.first + num2.first;
    dig2 = num1.second + num2.second;
    if(dig2 >= 1e15)
    {
        dig1++;
        dig2 -= 1e15;
    }
    return make_pair(dig1, dig2);
}
bool cmp_num(pair<ull, ull> num1, pair<ull, ull> num2)
{
    if(num1.first != num2.first)
        return num1.first > num2.first;
    return num1.second > num2.second;
}
int main()
{
    scanf("%d%d", &n, &m);
    while(n--)
    {
        for(int i = 1; i <= m; i++)
            scanf("%d", &mat[i]);
        for(int k = 1; k <= m; k++)
            for(int i = 1; i <= m - k + 1; i++)
            {
                pair<ull, ull> a, b;
                a = add_num(f[i][k - 1], make_pair(0, mat[i + k - 1]));
                a = add_num(a, f[i][k - 1]);
                b = add_num(f[i + 1][k - 1], make_pair(0, mat[i]));
                b = add_num(b, f[i + 1][k - 1]);
                if(cmp_num(a, b))
                    f[i][k] = a;
                else
                    f[i][k] = b;
                //f[i][k] = max(f[i][k - 1] * 2 + mat[i + k - 1], f[i + 1][k - 1] * 2 + mat[i]);
            }
        ans = add_num(f[1][m], ans);
        //ans += f[1][m];
    }
    ans = add_num(ans, ans);
    //ans *= 2;
    if(ans.first != 0)
        printf("%lld%015lld\n", ans.first, ans.second);
    else
        printf("%lld\n", ans.second);
    return 0;
}

90分 只有最后一个点WA
但是本地跑是对的
大佬们求解啊orz 本地输出

回复

3 条回复,欢迎继续交流。

正在加载回复...