社区讨论

关于本机测试与洛谷平台结果不一样这件事

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mm6hh1h3
此快照首次捕获于
2026/02/28 23:36
上周
此快照最后确认于
2026/03/03 14:10
上周
查看原帖
主要想法是每行dp求值再累加,个人感觉应该没问题(至少下面这个样例肯定能过)
样例1:
CPP
1 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 条回复,欢迎继续交流。

正在加载回复...