hdu5402 Travelling Salesman Problem(找规律,构造)
来源:互联网 发布:java支付宝开发 编辑:程序博客网 时间:2024/06/05 10:01
给出一张图,每个点上都有一个非负的数值;
要求从左上角走到右下角,走过的点不能再走,得到的最大数值是多少,并输出路线;(转)
http://acm.hdu.edu.cn/showproblem.php?pid=5402详细题解:http://www.cnblogs.com/AOQNRMGYXLMV/p/4743293.html
http://blog.csdn.net/yeyeyeguoguo/article/details/47802645
#include<bits/stdc++.h>using namespace std;int str[110][110];int main(){// freopen("1.txt","w",stdout); int n,m; while(~scanf("%d%d",&n,&m)) { int minn = 11000; int x,y,sum = 0; for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { scanf("%d",&str[i][j]); sum += str[i][j]; if((i+j) % 2 == 1 && str[i][j] < minn) { minn = str[i][j]; x=i,y=j; } } } if((n & 1) && (m & 1)) { printf("%d\n",sum); for(int i = 1;i <= n;++i) { if(i & 1) for(int j = 2;j <= m;++j) printf("R"); else for(int j = 2;j <= m;++j) printf("L"); if(i != n) printf("D"); } printf("\n"); continue; } if((n & 1) && !(m & 1)) { printf("%d\n",sum); for(int i = 1;i <= n;++i) { if(i & 1) for(int j = 2;j <= m;++j) printf("R"); else for(int j = 2;j <= m;++j) printf("L"); if(i != n) printf("D"); } printf("\n"); continue; } if(!(n & 1) && (m & 1)) { printf("%d\n",sum); for(int i = 1;i <= m;++i) { if(i & 1) for(int j = 2;j <= n;++j) printf("D"); else for(int j = 2;j <= n;++j) printf("U"); if(i != m) printf("R"); } printf("\n"); continue; } if(!(n & 1) && !(m & 1)) { printf("%d\n",sum-str[x][y]); if(x & 1||y==1) //拐来拐去限制在y-1列和y列,所以y=1要特殊处理 { for( int i=1;i<=y-2;++i) { for(int j = 2;j <= n;++j){ if(i & 1) printf("D"); else printf("U"); } printf("R"); } // 此时已经进入拐来拐去区域 int p=0,u=0; //u用来判断最后的位置是在拐来拐去那两列的左列还是右列,是左列的话还要输出一个R for(int i=1;i<=n-1;++i){ if(x != i){ if(p==0){ //p用来判断有没有经历过那个点,有的话一切相反 if(i & 1){ printf("RD"); u=1; } else{ printf("LD"); u=0; } } else{ if(i & 1){ printf("LD"); u=0; } else{ printf("RD"); u=1; } } } else{ printf("D"); //跳过这一行 p=1; } } if(u==0) printf("R"); if(y==1) y=2; //y=1相当于y=2的情况 if( y != m){ //还要判断拐来拐去结束后还有没有盘旋的区域,此时还没有进入 printf("R"); //进入盘旋区域 for(int i=y+1;i<=m;++i){ for(int j=2;j<=n;++j){ if(i & 1) printf("U"); else printf("D"); } if(i!=m) printf("R"); } } } else { for( int i=1;i<=y-2;++i) { for(int j = 2;j <= n;++j){ if(i & 1) printf("D"); else printf("U"); } printf("R"); } // cout<<"//"; int p=0,u=0; for(int i=n;i>=2;--i){ if(x != i){ if(p==1){ if(i & 1){ printf("RU"); u=1; } else{ printf("LU"); u=0; } } else{ if(i & 1){ printf("LU"); u=0; } else{ printf("RU"); u=1; } } } else{ printf("U"); p=1; } } if(u==0) printf("R"); // cout<<"//"; if( y != m){ printf("R"); for(int i=y+1;i<=m;++i) { for(int j=2;j<=n;++j){ if(i & 1) printf("U"); else printf("D"); } if(i != m) printf("R"); } } } printf("\n"); } } return 0;}
1 0
- hdu5402 Travelling Salesman Problem(找规律,构造)
- hdu5402 Travelling Salesman Problem
- hdu5402 Travelling Salesman Problem
- HDU5402 Travelling Salesman Problem 【模拟】
- hdu5402 Travelling Salesman Problem(棋盘染色+模拟)
- 【HDU 5402】Travelling Salesman Problem(构造)
- hdu 5402 Travelling Salesman Problem(构造)
- 规律,模拟,贪心(Travelling Salesman Problem,HDU 5402)
- HDU 5402 Travelling Salesman Problem(棋盘染色 构造 多校啊)
- HDU 5402 Travelling Salesman Problem (构造)(好题)
- hdu 5402 Travelling Salesman Problem(构造+棋盘黑白染色)
- HDU 5402 Travelling Salesman Problem(组合数学+构造)
- HDU 5402 (构造题)Travelling Salesman Problem
- hdu 5402 Travelling Salesman Problem (构造)
- hdu 5402 Travelling Salesman Problem 模拟构造
- hdu 5402 Travelling Salesman Problem(构造+模拟)
- Travelling Salesman Problem (hdu 5402 模拟)
- HDU-5402 Travelling Salesman Problem(模拟)
- 天嵌开发版 imx6 移植qt
- UEditor图片上传
- eclipse导入web工程变成Java工程,解决方案
- Java包的静态导入import static和import的区别
- 1. EL表达式+自定义标签
- hdu5402 Travelling Salesman Problem(找规律,构造)
- C#笔记二
- 【leetcode】Populating Next Right Pointers in Each Node
- 串口调试工具
- cc碎碎念
- 省市区选择器
- 心得
- 指针数组与数组指针------C++学习笔记
- 摄像头胖的降噪孔——丽音技术