传纸条(一)

这一道题和郑州轻工业的那次校赛的捡金子的题是一样的  ,  当时上就就用了搜索 ,  这一道题又试了试思路是 先从右下角到左上角赖以搜索 , 找到好心度最高的那一条路然后将该路线归零 , 然后再来搜索一次 , 将来两次的好心度相加 就是最终的结果 , 然后发现这不是最优解 , 这种两次的搜索是一种贪心的思想贪心只是一种概率上的最优解 , 下面附上 , 上述思想的代码 , 和能看出来非最优解的 数据

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 #include<limits.h>
15 using namespace std;
16 int n,m,a[55][55],visited[55][55],b[2][2]={-1,0,0,-1},result,flag,mark;
17 struct node
18 {
19     int x,y,step;
20     friend bool operator<(node s1,node s2)
21     {
22         return s1.step<s2.step;
23     }
24 };
25 priority_queue<node>Q;
26 void BFS(int y,int x)
27 {
28     node q={x,y,a[y][x]};
29     visited[y][x]=1;
30     Q.push(q);
31     while(!Q.empty())
32     {
33         node e=Q.top();
34         Q.pop();
35         for(int i=0;i<2;i++)
36         {
37             q.x=e.x+b[i][0],q.y=e.y+b[i][1];
38             if(q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!visited[q.y][q.x])
39             {
40                 visited[q.y][q.x]=1;
41                 q.step=e.step+a[q.y][q.x];
42                 Q.push(q);
43                 if(q.x==0&&q.y==0)
44                 {
45                     result+=q.step;
46                     flag=1;
47                     break;
48                 }
49             }
50         }
51         if(flag)
52         {
53             while(!Q.empty())
54                 Q.pop();
55         }
56     }
57 }
58 void DFS(int y,int x,int step)
59 {
60     if(step==result||mark)
61     {
62         a[y][x]=1;
63         return;
64         mark=1;
65     }
66     DFS(y-1,x,step+a[y-1][x]);
67     if(step==result||mark)
68     {
69         a[y][x]=1;
70         return;
71         mark=1;
72     }
73     DFS(y,x-1,step+a[y][x-1]);
74     if(step==result||mark)
75     {
76         a[y][x]=1;
77         return;
78         mark=1;
79     }
80 }
81 int main()
82 {
83     int t;
84     scanf("%d",&t);
85     while(t--)
86     {
87         scanf("%d%d",&n,&m);
88         for(int i=0;i<n;i++)
89             for(int j=0;j<m;j++)
90             scanf("%d",&a[i][j]);
91         memset(visited,0,sizeof(visited));
92         mark=result=flag=0;
93         BFS(n-1,m-1);
94         DFS(n-1,m-1,0);
95         printf("%d\n",result);
96     }
97     return 0;
98 }
时间: 2024-08-24 17:01:49

传纸条(一)的相关文章

传纸条(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).从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复.班里每

1006 传纸条

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

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

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

蓝桥杯 - 传纸条 (双线程DP)

题目传送:传纸条 思路:双线程DP,具体看代码; AC代码: #include <map> #include <set> #include <cmath> #include <deque> #include <queue> #include <stack> #include <cstdio> #include <cctype> #include <string> #include <vecto

nyoj 61——传纸条(一)——————【双线dp】

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

codevs——T1169 传纸条

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