您的位置:首页 > 其它

蓝桥杯 算法训练 传纸条

2017-12-06 22:44 253 查看
提示我用动态规划,可是我不会所以就用搜索写了一手,果断超时,,20分

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

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

完整的介绍在下面这个网址
http://blog.csdn.net/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]
[m]
);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: