社区讨论

请问大佬,为什么这个程序maxn=15会WA#4,而改为maxn=20即可AC?

P1004[NOIP 2000 提高组] 方格取数参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@lobdx57d
此快照首次捕获于
2023/10/29 19:25
2 年前
此快照最后确认于
2023/11/04 01:05
2 年前
查看原帖
CPP
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=20;
int n,mp[maxn][maxn],dp[maxn*2][maxn][maxn];

int main()
{
	scanf("%d",&n);
	int a=0,b=0,c=0;
	scanf("%d%d%d",&a,&b,&c);
	while(a||b||c)
	{
		mp[a][b]=c;
		scanf("%d%d%d",&a,&b,&c);
	}
	for(int k=1;k<=2*n;k++)
	{
		for(int i1=1;i1<=n;i1++)
		{
			for(int i2=1;i2<=n;i2++)
			{
				int j1=k-i1;
				int j2=k-i2;
				int t=mp[i1][j1];
				if(i1!=i2)
					t+=mp[i2][j2];
				dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1-1][i2-1]+t);
				dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1][i2-1]+t);
				dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1-1][i2]+t);
				dp[k][i1][i2]=max(dp[k][i1][i2],dp[k-1][i1][i2]+t);
			}
		}
	}
	printf("%d",dp[2*n][n][n]);
	return 0;
}
PS:4号数据点
in:
CPP
8
1 1 13
1 3 7
1 8 14
2 2 1
2 4 2
4 3 5
5 5 4
6 2 6
7 8 16
0 0 0
out:
CPP
60
maxn=15时,out
CPP
66

回复

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

正在加载回复...