NOIP2008 T3 传纸条 解题报告——S.B.S.

题目描述

小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个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:

3 3
0 3 9
2 8 5
5 7 0

输出样例#1:

34

说明

【限制】

30%的数据满足:1<=m,n<=10

100%的数据满足:1<=m,n<=50

NOIP 2008提高组第三题

---------------------------我是华丽丽的分割线------------------------------------------

很容易想到一个算法:

求出1个纸条从(11)到(M,N)的路线最大值.

删除路径上的点值

再求出1个纸条从(M,N到(11)的路线最大值.

统计两次和

上述算法很容易找出反例,如下图。

0 3 9              0 INF 9

2 8 5 -------> 2 INF 5

5 7 0              5 INF 0

1次找最优值传递后,导致第2次无法传递。

-贪心算法错误,因此我们需要同时考虑两个纸条的传递。

-由于小渊和小轩的路径可逆,因此,尽管出发点不同,但都可以看成同时从(1,1)出发到达(M,N)点。

-f(i1,j1,i2,j2)表示纸条1到达(i1,j1)位置,纸条2到达(i2,j2)位置的最优值。则有,

                            |f[i1-1][j1][i2-1][j2]

f(i1,j1,i2,j2)=max|f[i1-1][j1][i2][j2-1]

                            |f[i1][j1-1][i2-1][j2]

                            |f[i1][j1-1][i2][j2-1]

-其中 (i1,j1)<> (i2,j2)

-1<=i1, i2<=M, 1<=j1 , j2<=N

-时间复杂度O(N2M2)

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include<cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 int d[51][51];
 8 int s[51][51][51][51];
 9 int main()
10 {
11
12     int i,j,k,l;
13     int n,m;
14     cin>>m>>n;
15     memset(s,0,sizeof(s));
16     memset(d,0,sizeof(d));
17     for(i=1;i<=m;i++)
18      for(j=1;j<=n;j++)
19         cin>>d[i][j];
20     for(i=1;i<=m;i++)
21     {
22         for(j=1;j<=n;j++)
23         {
24             for(k=1;k<=m;k++)
25             {
26                 for(l=1;l<=n;l++)
27                 {
28                     s[i][j][k][l]=max(s[i][j][k][l],s[i-1][j][k-1][l]);
29                     s[i][j][k][l]=max(s[i][j][k][l],s[i-1][j][k][l-1]);
30                     s[i][j][k][l]=max(s[i][j][k][l],s[i][j-1][k-1][l]);
31                     s[i][j][k][l]=max(s[i][j][k][l],s[i][j-1][k][l-1]);
32                     s[i][j][k][l]+=d[i][j];
33                     if(i!=k||j!=l)   s[i][j][k][l]+=d[k][l];
34                 }
35             }
36         }
37     }
38     cout<<s[m][n][m][n];
39     return 0;
40 }

传纸条

时间: 2024-10-07 18:33:18

NOIP2008 T3 传纸条 解题报告——S.B.S.的相关文章

【NOIP2008】传纸条

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

【noip】noip2008 wikioi1169传纸条

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

NOIP2008 普及组T3 传球游戏 解题报告-S.B.S.

题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视作不同的方法,当且仅当

NOIP2008解题报告

2008年的题目相对比较简单,都不是很麻烦,认真写就能写对. 第一题: 题目大意:给出一个小写单词,求出最少出现的字母的出现次数和最多出现的字母的出现次数. 解题过程:直接hash模拟就好. 第二题: 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A.B.C>=0) 3. n

noip2008 传纸条

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

【解题报告】瑞士轮(NOIP2011普及组T3)

[题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时候也要注意.) 我是用的比较常规的方法,每次扫描整个序列,计算胜者和负者,分入两个数组,然后把这两个数组归并回原来的序列里(因为这两个序列都已经有序,所以可以免去排序直接合并),题目中要求编号小的排在前面,因为归并是稳定排序所以不需要担心这些. 其实本质来说就是个讲究技巧的模拟吧? 下贴代码,风格照

&lt;转自原博客&gt; NOIP2008 传纸条

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

NYOJ 61 传纸条(一)

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

CH5103 传纸条【线性dp】

5103 传纸条 0x50「动态规划」例题 描述 给定一个 N*M 的矩阵A,每个格子中有一个整数.现在需要找到两条从左上角 (1,1) 到右下角 (N,M) 的路径,路径上的每一步只能向右或向下走.路径经过的格子中的数会被取走.两条路径不能经过同一个格子.求取得的数之和最大是多少.N,M≤50. 输入格式 第一行有2个用空格隔开的整数n和m,表示有n行m列(1<=n,m<=50).接下来的n行是一个n*m的矩阵,每行的n个整数之间用空格隔开. 输出格式 一个整数,表示答案. 样例输入 3 3