题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5402
类似于黑白棋盘,有的格子是可以不走的,有的格子是不能不走的,对于m或n中有一个奇数的情况,
所有的数都可以走到,当m和n都是偶数的时候,则需要分情况讨论,两行缩成一行走,
从而走遍可以走的数。m=1且n=1的时候需要特判
#include<stdio.h> #include<cstring> ; int main(){ int n, m; int sum; int maze[MAXN][MAXN]; // freopen("e.txt","r",stdin); while(~scanf("%d%d",&n,&m)){ sum = ; memset(maze,,sizeof(maze)); ; i < n; ++i){ ; j < m; ++j){ scanf("%d",&maze[i][j]); sum += maze[i][j]; } } && m == ){ printf("%d\n",sum); printf("R\n"); continue; } == ){ printf("%d\n",sum); ; i < n; ++i){ ; j < m; ++j){ ){ printf("D"); continue; } == ) printf("R"); else printf("L"); } ) printf("D"); } printf("\n"); continue; } == ){ printf("%d\n",sum); ; i < m; ++i){ ; j < n; ++j){ == ) printf("D"); else printf("U"); } ) printf("R"); } printf("\n"); continue; } else{ ; int pi, pj; ; i < n; ++i){ ; j < m; ++j){ == && (maze[i][j] < _min)){ _min = maze[i][j]; pi = i; pj = j; } } } // 找到最小值 printf("%d\n",sum-_min); == ){ ; i < pi-; ++i ){ ; j < m-; ++j){ == ) printf("R"); else printf("L"); } ) printf("D"); } } // 如果是奇数行出现,前pi-2行按规律走 else{ ; i < pi; ++i ){ ; j < m-; ++j){ == ) printf("R"); else printf("L"); } ) printf("D"); } } // 如果是偶数行出现,前pi-1行按规律走 ; i < pj; ++i){ == ) printf("D"); else printf("U"); printf("R"); } ) printf("R"); ; i < m; ++i){ == ) printf("D"); else printf("U"); ) printf("R"); } == && pi + == n) && !( pi % == && pi + == n )) printf("D"); // 两行变一行 == ){ ; i < n; ++i ){ ; j < m-; ++j){ == ) printf("R"); else printf("L"); } ) printf("D"); } } else{ ; i < n; ++i ){ ; j < m; ++j){ == ) printf("R"); else printf("L"); } ) printf("D"); } } } printf("\n"); } }