hdu5402
这道题需要仔细想,想全面,虽然题中没坑,但是,对于思维没有好习惯的人来说,到处都是坑,主要就是没有注意到偶数,奇数在这道题中的意义。这道题队友写的前面,我写的后面。
(今天晚上和队友又去吃的明味家,这次吃的是泡菜味的乌冬面,因为米饭太硬,而且米饭比面条更容易胖,,去买衣服的时候那种靠几率的感觉真的比tle还要糟糕,不过队友吃出了虫子,我吃出了类似于头发的东西,只能说,凭几率来说,能同时出现这种情况很大概率的情况下是因为出现这种情况的概率很大!!!)
2015.8.29:
这道题其实记忆挺深的,构造时的方法出了点问题,问题在于当那个最小值是出现在偶数行,奇数列时,应该考虑到应该是最后一行,但是由于绝对不是第一列,所以那个曲折应该是它和上面哪一行一起完成的;当那个最小值出现在奇数行,偶数列时,应该考虑这一行可能是第一行,但绝对不是最后一行,所以那个曲折应该是它和下面哪一行一起完成的。
#include<stdio.h> #include<math.h> #include<string.h> using namespace std; #define INF 0x3f3f3f3f #define N 110 int main() { int n,m; int fi,fj; int temp; while(scanf("%d%d",&n,&m)!=EOF) { long long int num=0; int min=INF; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&temp); num=num+temp; if(temp<min&&!((i%2!=0&&j%2!=0)||(i%2==0&&j%2==0))) { min=temp; fi=i; fj=j; } } } if(n%2==0&&m%2==0) num=num-min; printf("%lld\n",num); if(n%2) { for(int i=0;i<n;i++) { for(int j=0;j<m-1;j++) { if(i%2) printf("L"); else printf("R"); } if(i!=n-1){ printf("D"); } } } else if(m%2) { for(int j=0;j<m;j++) { for(int i=0;i<n-1;i++) { if(j%2) printf("U"); else printf("D"); } if(j!=m-1){ printf("R"); } } } else { //printf("%d %d\n",fi,fj); if(!(fi%2)) { for(int i=0;i<=fi-2;i=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 i=0;i<=fj-3;i=i+2){ printf("DRUR"); } printf("DR"); if(fj!=m-1){ for(int i=fj;i<=m-3;i=i+2){ printf("RURD"); } } if((fi+1)!=(n-1)){ printf("D"); for(int i=fi+2;i<=n-2;i=i+2){ for(int i=m-1;i>=1;i--){ printf("L"); } printf("D"); for(int i=0;i<m-1;i++){ printf("R"); } if(i!=n-2){ printf("D"); } } } } else { for(int i=0;i<=fi-2;i=i+2){ for(int j=0;j<m-1;j++){ printf("R"); } printf("D"); for(int j=0;j<m-1;j++){ printf("L"); } printf("D"); } for(int i=0;i<=fj-2;i=i+2){ printf("DRUR"); } printf("RD"); for(int i=fj+1;i<=m-3;i+=2){ printf("RURD"); } if(fi!=(m-1)){ for(int i=fi+1;i<=n-2;i=i+2){ printf("D"); for(int i=m-1;i>=1;i--){ printf("L"); } printf("D"); for(int i=0;i<m-1;i++){ printf("R"); } } } } } printf("\n"); } return 0; }