1006 传纸条

难度:普及+/提高

题目类型:动态规划

提交次数:1

涉及知识:多维动规

题目描述

小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。

在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复。班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙。反之亦然。

还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用0表示),可以用一个0-100的自然数来表示,数越大表示越好心。小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度只和最大。现在,请你帮助小渊和小轩找到这样的两条路径。

输入输出格式

输入格式:

输入文件message.in的第一行有2个用空格隔开的整数m和n,表示班里有m行n列(1<=m,n<=50)。

接下来的m行是一个m*n的矩阵,矩阵中第i行j列的整数表示坐在第i行j列的学生的好心程度。每行的n个整数之间用空格隔开。

输出格式:

输出文件message.out共一行,包含一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int m, n;
 4 int kind[51][51];
 5 int f[51][51][51][51];
 6 int main(){
 7     cin>>m>>n;
 8     int i, j, k, l;
 9     for(i = 1; i <= m; i++)
10         for(j = 1; j <=n; j++)
11             cin>>kind[i][j];
12     for(i = 1; i <= m; i++){
13         for(j = 1; j <= n; j++){
14             for(k = 1; k <= m; k++){
15                 for(l = 1; l <= n; l++){
16                     if((i < m||j < n)&&i <= k&&j <= k)
17                         continue;
18                     int num = 0;
19                     num = max(num, f[i-1][j][k-1][l]);
20                     if(i-1!=k&&j!=l-1)
21                         num = max(num,f[i-1][j][k][l-1]);
22                     if(i!=k-1&&j-1!=l)
23                         num = max(num, f[i][j-1][k-1][l]);
24                     num = max(num, f[i][j-1][k][l-1]);
25                     f[i][j][k][l] = num+kind[i][j]+kind[k][l];
26                 }
27             }
28         }
29     }
30     cout<<f[m][n][m][n];
31     return 0;
32 }

备注:

参考题解:

设f[i][j][k][l]为从 (0, 0) 位置由两条不交叉的线路走到 (i, j),(k, l) 位置时的最大好感度和,则它的上一步可能有四种情况:

第一个点由上走来,第二个点也由上走来,此时的好感度和为f[i - 1][j][k - 1][l] + a[i][j] + a[k][l]

第一个点由上走来,第二个点则由左走来,此时的好感度和为f[i - 1][j][k][l - 1] + a[i][j] + a[k][l],但此时应考虑第一个点的上方的点是否会与第二个点的左方的点重合,如果重合则不可取

第一个点由左走来,第二个点则由上走来,此时的好感度和为f[i][j - 1][k - 1][l] + a[i][j] + a[k][l],但此时应考虑第一个点的左方的点是否会与第二个点的上方的点重合,如果重合则不可取

第一个点由左走来,第二个点也由左走来,此时的好感度和为f[i][j - 1][k][l - 1] + a[i][j] + a[k][l]

取四种情况中的最大者即可。

其中还没到终点前不能走到同一个点,因此(i, j)不能等于(k, l) , 加上小于判断是因为当(i, j)跟(k, l)互换时,最大好感度值必定一样,不必重复计算

听说百分之百的题都可以用动规解(翻白眼.jpg)。。我要好好练动规。

时间: 2024-10-07 07:04:43

1006 传纸条的相关文章

Luogu 1006 传纸条

多维动态规划里面的题orz 简化问题为从一个方向传两张纸条 所以用四维数组. 状态转移方程: \(f[i][j][k][l]=max(f[i-1][j][k-1][l],f[i][j-1][k-1][l],f[i-1][j][k][l-1],f[i][j-1][k][l-1])+map[i][j]+map[k][l]\) #include<iostream> #include<cstdio> using namespace std; int m,n,x,y,val,f[51][51

传纸条(洛谷 1006)

题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复.班里每

洛谷 P1006 传纸条 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1006 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m

传纸条(scrip)

传纸条(scrip) 题目背景 Awson是某国际学校信竞组的一只菜鸡.每次竞赛考试都只能垫底.终于有一天,他决定不再苟活,发挥他的人脉优势,准备在一次竞赛考试时传纸条作弊. 题目描述 他预先知道了考试时机房人数N(1<=N<=10000),自己编号为1,并且由于他十分地交际,所以能够确保所有人能为他提供答案.为了传递纸条,他会开动脑筋,想出M(0<=M<=100000)种单个可行方案.每种单个方案不一定与自己有关,因为他可以间接地从别人那获得他人的答案.每种方案已知三个数据U,V

南阳OJ 61 传纸条(一)

传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者

codevs——1169 传纸条(棋盘DP)

2008年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,

tyvj1011 传纸条

背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递.在活动进行中,小渊希望给小轩传递一张

noip 2008 传纸条

题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复.班里每

【NOIP】【codevs】【DP】1169传纸条

呜呜呜这题太虐心了呜呜呜,花了整整两天的时间才把错误找出来,多亏了电子科大的两位金牌的指导... 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊传到小轩的纸条只可以向下或者向右