大佬求教,这份代码为什么连大样例也过不去?
查看原帖
大佬求教,这份代码为什么连大样例也过不去?
322285
北京楼主2021/2/3 07:42

代码如下:

//P1006 [NOIP2008 提高组] 传纸条
#include<bits/stdc++.h>
using namespace std;
long long f[50+10][50+10][50+10][50+10];
int a[50+10][50+10];
int main()
{
	int m,n;
	cin>>m>>n;
	for(int i=1;i<=m;++i)
		for(int j=1;j<=n;++j)
			cin>>a[i][j];
	for(int i=1;i<=m;++i)
		for(int j=1;j<=n;++j)
			for(int k=1;k<=m;++k)
				for(int l=1;l<=n;++l)
				{
					f[i][j][k][l]=max(f[i-1][j][k+1][l],max(f[i][j-1][k+1][l],max(f[i-1][j][k][l+1],f[i][j-1][k][l+1])))+a[i][j]+a[k][l];
					if(i==k&&j==l)f[i][j][k][l]-=a[i][j];
				}
	cout<<f[m][n][1][1];
	return 0;
}

改了成下面这份代码却AC了:

//P1006 [NOIP2008 提高组] 传纸条
#include<bits/stdc++.h>
using namespace std;
long long f[50+10][50+10][50+10][50+10];
int a[50+10][50+10];
int main()
{
	int m,n;
	cin>>m>>n;
	for(int i=1;i<=m;++i)
		for(int j=1;j<=n;++j)
			cin>>a[i][j];
	for(int i=1;i<=m;++i)
		for(int j=1;j<=n;++j)
			for(int k=1;k<=m;++k)
				for(int l=1;l<=n;++l)
				{
					f[i][j][k][l]=max(f[i-1][j][k-1][l],max(f[i][j-1][k-1][l],max(f[i-1][j][k][l-1],f[i][j-1][k][l-1])))+a[i][j]+a[k][l];
					if(i==k&&j==l)f[i][j][k][l]-=a[i][j];
				}
	cout<<f[m][n][m][n];
	return 0;
}

两份代码在思路上没有区别,然而输出的结果不一样,为什么?

感谢指教

2021/2/3 07:42
加载中...