标签:force long closed for spl codeforce display style 原来
题意:有一块n*m的草坪,g代表草,w代表种子,从(1,1)这点出发,然后走完所有是w的点
首先可以确定一点是从上到下,不会回头,这样还是挺好想的(你其实可以看成一行上的移动),因为回头的话会加上原来的一步了,然后怎么在单一行里面走,这就是我一直纠结的地方!
我觉得这题没有一点dp的意思,如其说dp,还不如说是贪心,单行我还是不会证明,下次再学吧!
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int n,m; 5 char sz[153][153]; 6 int gz[153][153]; 7 int main(){ 8 scanf("%d%d",&n,&m); 9 getchar(); 10 for(int i=1;i<=n;i++) scanf("%s",sz[i]); 11 for(int i=1;i<=n;i++){ 12 for(int j=1;j<=m;j++){ 13 gz[i][j]=(sz[i][j-1]==‘W‘); 14 } 15 } 16 // for(int i=1;i<=n;i++){ 17 // for(int j=1;j<=m;j++){ 18 // printf("%d ",gz[i][j]); 19 // } 20 // printf("\n"); 21 // } 22 ll las=1,now=1,ans=0; 23 for(int i=1;i<=n;i++){ 24 ll st=-1,ed=-1; 25 for(int j=1;j<=m;j++){ 26 if(gz[i][j]==1){ 27 if(st==-1) st=j; 28 ed=j; 29 } 30 } 31 if(st==-1) continue; 32 las=i; 33 if(i%2==1){ 34 if(now>st){ 35 ans+=abs(st-now); 36 now=st; 37 } 38 ans+=abs(ed-now); 39 now=ed; 40 }else{ 41 if(now<ed){ 42 ans+=abs(ed-now); 43 now=ed; 44 } 45 ans+=abs(st-now); 46 now=st; 47 } 48 //printf("%d\n",ans); 49 } 50 //printf("%d %d\n",ans,las); 51 cout<<ans+(las-1)<<endl; 52 return 0; 53 }
标签:force long closed for spl codeforce display style 原来
原文地址:https://www.cnblogs.com/pandaking/p/9940736.html