【推导】【构造】Petrozavodsk Summer Training Camp 2015 Day 2: Xudyh (TooSimple) Contest, Saturday, August 22, 2015 Problem G. Travelling Salesman Problem
2017-08-16 23:35
656 查看
一个矩阵,每个位置有一个非负整数,一个人从左上走到右下,不能走重复的格子,问得到的最大权值。
当长宽不都为偶数时,必然能走遍所有格子,横着从左到右,从右到左(或是竖着走)走完即可。
当长宽都是偶数时,必然只有一个格子走不到,黑白染色后,就是白色格子中的最小值走不到,别的全都可以走得到。
两行两行地走,如果没到不取的那个格子所在的那两行,那就横着从左到右,从右到左;如果到了这两行,就竖着循环走;过了这两行之后,就横着从右到左,从左到右。
当长宽不都为偶数时,必然能走遍所有格子,横着从左到右,从右到左(或是竖着走)走完即可。
当长宽都是偶数时,必然只有一个格子走不到,黑白染色后,就是白色格子中的最小值走不到,别的全都可以走得到。
两行两行地走,如果没到不取的那个格子所在的那两行,那就横着从左到右,从右到左;如果到了这两行,就竖着循环走;过了这两行之后,就横着从右到左,从左到右。
#include<cstdio> using namespace std; bool co[105][105]; int n,m,a[105][105],T; int main(){ // freopen("g.in","r",stdin); scanf("%d",&T); a[0][0]=2147483647; for(;T;--T){ scanf("%d%d",&n,&m); int sum=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ scanf("%d",&a[i][j]); sum+=a[i][j]; } } if(n%2==1){ printf("%d\n",sum); for(int i=1;i<=n;++i){ for(int j=1;j<m;++j){ putchar(i%2==1 ? 'R' : 'L'); } if(i!=n){ putchar('D'); } } puts(""); } else if(n%2==0 && m%2==1){ printf("%d\n",sum); for(int i=1;i<=m;++i){ for(int j=1;j<n;++j){ putchar(i%2==1 ? 'D' : 'U'); } if(i!=m){ putchar('R'); } } puts(""); } else{ for(int i=1;i<=n;++i){ bool pen=(i%2==1); for(int j=1;j<=m;++j){ co[i][j]=pen; pen^=1; } } int x=0,y=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ if(co[i][j]==0 && a[i][j]<a[x][y]){ x=i; y=j; } } } sum-=a[x][y]; printf("%d\n",sum); bool flag=0; for(int i=1;i<=n;i+=2){ if(!flag && (i==x || i+1==x)){ bool tag=0; for(int j=1;j<=m;++j){ if(j!=y){ putchar(tag==0 ? 'D' : 'U'); tag^=1; } if(j!=m){ putchar('R'); } } flag=1; } else if(!flag){ for(int j=1;j<m;++j){ putchar('R'); } putchar('D'); for(int j=1;j<m;++j){ putchar('L'); } } else{ for(int j=1;j<m;++j){ putchar('L'); } putchar('D'); for(int j=1;j<m;++j){ putchar('R'); } } if(i!=n-1){ putchar('D'); } } puts(""); } } return 0; }
相关文章推荐
- 【随机化】Petrozavodsk Summer Training Camp 2016 Day 5: Petr Mitrichev Contest 14, Saturday, August 27, 2016 Problem I. Vier
- 【枚举】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem G. Equation
- 【计算几何】【极角排序】【二分】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem J. Triangles
- 【线段树】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem H. Hay
- 2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem
- 2015 Multi-University Training Contest 9-1007 Travelling Salesman Problem
- 【Tarjan算法】【DFS】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem B. Point Pairs
- 【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye
- 【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
- 【博弈论】【SG函数】【线段树】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem H. Cups and Beans
- 【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
- HDU 5402 Travelling Salesman Problem (2015 Multi-University Training Contest 9 2015多校联合)
- 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
- hdu 5349 MZL's simple problem 2015 Multi-University Training Contest 5
- 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest (5/9)
- HDU--5349--2015 Multi-University Training Contest 5--MZL's simple problem
- 2015多校第九场 HDU 5402 Travelling Salesman Problem 棋盘染色法,构造
- hdu5402 Travelling Salesman Problem(找规律,构造)
- HDU 5402 Travelling Salesman Problem (构造)(好题)
- Problem E. Exponial---Urozero Autumn Training Camp 2016-Day 1||指数降幂公式