社区讨论
关于本机测试与洛谷平台结果不一样这件事
P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mm6hh1h3
- 此快照首次捕获于
- 2026/02/28 23:36 上周
- 此快照最后确认于
- 2026/03/03 14:10 上周
主要想法是每行dp求值再累加,个人感觉应该没问题(至少下面这个样例肯定能过)
样例1:
CPP1 1
0
自己机子上跑的是0,但是评测机反馈read 4,expected 0(详见记录详情#1)
个人怀疑是因为自己scanf()函数不熟悉用错了,但是自己本地测试没问题一提交全是WA就很奇怪,对这件事请问各位有什么思路吗
附上本人生涩的代码,求各路大佬指正:
CPP#include<stdio.h>
#include<math.h>
#define NUM 81
inline long int max(long int a,long int b)
{
return (a>b?a:b);
}
inline long int val(int q[NUM],int m)
{
long int f[NUM][NUM]={};//f[i][j]表示该行取走i个数并且其中有j个是取行首的情况下得分最大值
for(int i=1;i<=m;++i)
{
for(int j=0;j<=i;++j)
{
f[i][j]=max(f[i-1][j-1]+q[j]*pow(2,i),f[i-1][j]+q[m-i+j+1]*pow(2,i));//状态转移
}
}
long int ans=f[m][0];
for(int j=1;j<=m;++j)if(ans<f[m][j])ans=f[m][j];
return ans;
}
int main()
{
int n,m;long int ans=0;scanf("%d%d",&n,&m);
for(int k=0;k<n;++k)
{
int q[NUM]={};
for(int l=1;l<=m;++l)
{
scanf("%d",q+l);
}
ans+=val(q,m);
}
printf("%ld",ans);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...