蓝桥杯 算法训练 传纸条

提示我用动态规划,可是我不会所以就用搜索写了一手,果断超时,,20分


下面转载一个博主的满分代码学习学习

博主的思路是真的流批,大佬大佬


完整的介绍在下面这个网址


http://blog.youkuaiyun.com/u011077606/article/details/43302987


#include <stdio.h>
#include <string.h>
int arr[52][52];
/*
* re[x1][y1][x2][y2]表示
* 传到坐标为(x1, y1)和(x2, y2)的同学的好感度最大值
*/
int re[52][52][52][52];

int max(int a, int b, int c, int d) {
	if (a < b) a = b;
	if (a < c) a = c;
	if (a < d) a = d;
	return a;
}

int main (  ) {
	int m, n;
	int x1, y1, x2, y2;
	scanf("%d %d", &m, &n);
	
	for (x1 = 1; x1 <= m; x1++) {
		for (y1 = 1; y1 <= n; y1++) {
			scanf("%d", &arr[x1][y1]);
		}
	}
	for (x1 = 1; x1 <= m; x1++) {
		for (y1 = 1; y1 <= n; y1++) {
			for (x2 = 1; x2 <= m; x2++) {
				if (x1 + y1 - x2 > 0) {
					y2 = x1 + y1 - x2;
				} else continue;
				re[x1][y1][x2][y2] = max(re[x1-1][y1][x2-1][y2],
									re[x1][y1-1][x2-1][y2],
									re[x1][y1-1][x2][y2-1],
									re[x1-1][y1][x2][y2-1])
									+ arr[x1][y1] + arr[x2][y2];
				if (x1 == x2 && y1 == y2) {
					re[x1][y1][x2][y2] -= arr[x1][y1];
				}
			}
		}
	}
	printf("%d", re[m][n][m][n]);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值