P1006 传纸条求助(非调代码)
  • 板块灌水区
  • 楼主typerxiaozhu
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/23 22:04
  • 上次更新2023/12/24 09:22:04
查看原帖
P1006 传纸条求助(非调代码)
807832
typerxiaozhu楼主2023/12/23 22:04

蒟蒻知道可以用和方格取数一样的方法来做,并且也会证明为什么如果一个人只能传一次,第二次就把他的好感当成 0,因为肯定有更优选择。只是如果我保留方格取数这个做法在里面特判是否重合就不行了?代码如下:

#include <iostream>
using namespace std;
const int N = 55;
int f[N * 2][N][N];
int w[N][N];
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			cin >> w[i][j];
	for (int k = 2; k <= n + m; k++)
	{
		for (int i1 = 1; i1 < k; i1++)
		{
			for (int i2 = 1; i2 < k; i2++)
			{
				if (i1 == i2 && i1 != n && i2 != n) continue;
				int j1 = k - i1, j2 = k - i2;
				int& x = f[k][i1][i2];
				int t = w[i1][j1] + w[i2][j2];
				x = max(x, f[k - 1][i1][i2] + t);
				x = max(x, f[k - 1][i1 - 1][i2] + t);
				x = max(x, f[k - 1][i1][i2 - 1] + t);
				x = max(x, f[k - 1][i1 - 1][i2 - 1] + t);
			}
		}
	}
	cout << f[n + m][n][n];
	return 0;
}

蒟蒻已经想到了达到终点一定会重合所以也特判掉了,只不过这样只能得 70 分,求大佬赐教

2023/12/23 22:04
加载中...