社区讨论

关于本题容易WA的几个点

P1772[ZJOI2006] 物流运输参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lvmfwmir
此快照首次捕获于
2024/04/30 21:44
2 年前
此快照最后确认于
2024/05/01 09:43
2 年前
查看原帖
  1. 混淆 nnmmnn 是天数,mm 是点数,检查你计算 cost[i][r]cost[i][r] 时,枚举的是不是点数 mm,还有 cost[i][j]=d[m]cost[i][j] = d[m]
CPP
	for(int i=1; i<=n; i++)
	{
		for(int j=i; j<=n; j++)
		{
			memset(ok, 0, sizeof ok);
			for(int u=1; u<=m; u++)
				for(int k=i; k<=j; k++)
					if(limit[k][u])
					...
			spfa(1);
			cost[i][j] = d[m];
		}
	}
  1. 容易爆 intint 的地方:题中说每天都会有一条从 11~mm 的路线,但是不保证第 ii~jj 天走同一条路能够到达,所以 cost[i][j]cost[i][j] 可能会等于 INFINF,所以和 (ij)(i-j) 相乘就会爆掉,所以你可以采取下面这种写法来保证不会爆 intint
CPP
	for(int i=1; i<=n; i++)
	{
		f[i] = 2e9;
		for(int j=0; j<i; j++)
		{
			if(cost[j+1][i]!=INF)
				f[i] = min(f[i], f[j] + cost[j+1][i] * (i - j) + (!!j) * k);
		}
	}
关于为什么要 (!!j) * k,如果不这样的话,从 j=0j=0 转移的话就会多加上 kk

回复

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

正在加载回复...