社区讨论
本地运行没问题 评测机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
但是本地跑是对的
大佬们求解啊orz

回复
共 3 条回复,欢迎继续交流。
正在加载回复...