HDU5402 Travelling Salesman Problem 【模拟】
来源:互联网 发布:砍柴网源码 编辑:程序博客网 时间:2024/06/01 10:20
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402
题意:见 https://vjudge.net/problem/HDU-5402
题解:
如果 n m 其中有一个奇数,那么一定可以到达,输出就可以了。
否则 我们不妨以(1,1) (n,m) 为黑色,将该棋盘黑白格染色,我们可以发现,必定有一个白格子没有走到,我们让最小权值白格子不走到即可
比较麻烦,实现过程细节很多,详见代码。
这题没看着多组数据WA了4次,多组数据 n,m 判奇数后直接return 0 WA了1次。。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <map> // STL#include <string> #include <vector>#include <queue>#include <stack>#define mpr make_pair#define debug() puts("okkkkkkkk")using namespace std;typedef long long LL;const int inf = 1 << 26;int n, m, sum = 0, tmpmx = inf, x, y;int matr[2005][2005];void init() { tmpmx = inf; x = 0; y = 0; sum = 0; memset(matr, 0, sizeof(matr)); }int main(){// freopen("ACM-A.in", "r", stdin); while( scanf("%d %d", &n, &m) != EOF ) { init(); for ( int i = 1; i <= n; i ++ ) { for ( int j = 1; j <= m; j ++ ) { scanf("%d", &matr[i][j]); sum += matr[i][j]; if((i+j)&1 && matr[i][j] < tmpmx) { tmpmx = matr[i][j]; x = i; y = j; } } } if( n&1 || m&1 ) { printf("%d\n", sum); if( n&1 ) { for ( int i = 1; i < n; i += 2) { for ( int j = 1; j < m; j ++ ) printf("R"); printf("D"); for ( int j = 1; j < m; j ++ ) printf("L"); printf("D"); } for ( int j = 1; j < m; j ++ ) printf("R"); } else { for ( int i = 1; i < m; i += 2) { for ( int j = 1; j < n; j ++ ) printf("D"); printf("R"); for ( int j = 1; j < n; j ++ ) printf("U"); printf("R"); } for ( int j = 1; j < n; j ++ ) printf("D"); } puts(""); continue; } int fg = 1; printf("%d\n", sum-matr[x][y]); for ( int i = 1; i <= n; i += 2 ) { if(x == i || x == i+1 ) { for ( int j = 1; j < y; j ++ ) { if(j&1) printf("D"); else printf("U"); printf("R"); } if(y < m) printf("R"); for ( int j = y+1; j <= m; j ++ ) { if(j&1) printf("U"); else printf("D"); if(j != m) printf("R"); } if(i < n-1) printf("D"); fg = 0; } else if(fg) { for ( int j = 1; j < m; j ++ ) printf("R"); printf("D"); for ( int j = 1; j < m; j ++ ) printf("L"); printf("D"); } else if(!fg) { for ( int j = 1; j < m; j ++ ) printf("L"); printf("D"); for ( int j = 1; j < m; j ++ ) printf("R"); if(i < n-1) printf("D"); } } puts(""); } return 0;}
阅读全文
0 0
- HDU5402 Travelling Salesman Problem 【模拟】
- hdu5402 Travelling Salesman Problem(棋盘染色+模拟)
- hdu5402 Travelling Salesman Problem
- hdu5402 Travelling Salesman Problem
- hdu5402 Travelling Salesman Problem(找规律,构造)
- Travelling Salesman Problem (hdu 5402 模拟)
- HDU-5402 Travelling Salesman Problem(模拟)
- hdu 5402 Travelling Salesman Problem 模拟构造
- HDOJ 5402 Travelling Salesman Problem 模拟
- hdu 5402 Travelling Salesman Problem(构造+模拟)
- <OJ_Sicily>Travelling Salesman Problem
- HDU 5402 Travelling Salesman Problem(多校9 模拟)
- hdu(5402)——Travelling Salesman Problem(模拟题)
- HDU 5402 Travelling Salesman Problem (MUT#9 暴力模拟)
- hdu 5402 Travelling Salesman Problem(模拟,棋盘染色问题)
- 规律,模拟,贪心(Travelling Salesman Problem,HDU 5402)
- HDU 5402 Travelling Salesman Problem
- 【HDOJ 5402】Travelling Salesman Problem
- 0906 JSP标准标签库JSTL
- myeclipse 10卡死强退后再打开就卡在 loading workbench解决方法
- Path of Equal Weight
- eplise 连接谷歌服务器
- Dynamic Shadow Projector
- HDU5402 Travelling Salesman Problem 【模拟】
- 自我介绍以及对于软件工程的看法
- Unity 2017 内网环境 项目选择页白屏问题
- POJ 3041-Asteroids(二分图最小顶点覆盖)
- Python自学日志_2017-9-05
- python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。
- Java程序员必备知识-多线程框架Executor详解
- 欢迎使用CSDN-markdown编辑器
- quartz详解2:quartz由浅入深