#include #include #define INF 999999999 #define max(A,B)(A>B?A:B) using namespace std; struct S{ int x,y; }fruit[20],t; int n,m,cnt,ans,mp[256][256],dis[20][20],cost[256][256],nxt[4][2]={{1,0},{0,1},{-1,0},{0,-1}},mx[1<<18][20],val[20]; void bfs(S t) { int i,j,nx,ny; for(i=0;ique; cost[t.x][t.y]=0; que.push(t); while(!que.empty()) { t=que.front(); for(i=0;i<4;i++) { nx=t.x+nxt[i][0]; ny=t.y+nxt[i][1]; if(nx>=0 && nx=0 && ny0) { fruit[cnt].x=i; fruit[cnt].y=j; val[cnt++]=mp[i][j]; } } } if(n==1 && m==1) { if(mp[0][0]>=0) printf("%d\n",mp[0][0]); else printf("you loss!\n"); continue; } if(mp[0][0]<=0) { printf("you loss!\n"); continue; } if(mp[n-1][m-1]==-1) { printf("you loss!\n"); continue; } fruit[cnt].x=n-1; fruit[cnt].y=m-1; for(i=0;i<=cnt;i++) { bfs(fruit[i]); for(j=0;j<=cnt;j++) dis[i][j]=cost[fruit[j].x][fruit[j].y]; } queueque; for(i=1;i<(1<=0) { t.x=(t.x | (1<mx[t.x][i]) { mx[t.x][i]=v+val[i]; que.push(t); } t=que.front(); } } } que.pop(); } ans=-1; for(i=1;i<(1<=0) printf("%d\n",ans); else puts("you loss!"); } }