标签:des style blog http io color os ar java
非常经典的一类题型
没有多个出口。这里题目没有说清楚
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4684 Accepted Submission(s): 983
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <string> #include <queue> #include <stdlib.h> using namespace std; struct node { int x,y,cnt; }que[2555]; int n,m,t,tj; int cost[11]; int dis[25][25]; char g[55][55]; int sid,tid; int mlink[55][55]; int qf,qd; int up[4]={1,0,-1,0}; int rl[4]={0,1,0,-1}; int dp[12][12][10100]; void bfs(int sx,int sy) { int mark[55][55]; memset(mark,0,sizeof(mark)); qf=qd=0; node finode; mark[sx][sy]=1; finode.x=sx; finode.y=sy; finode.cnt=0; que[qf++]=finode; while(qf>qd) { node cur=que[qd++]; for(int i=0;i<4;i++) { int tx,ty; tx=cur.x+up[i]; ty=cur.y+rl[i]; if( (tx>=0&&tx<n)&&(ty>=0&&ty<m) && g[tx][ty]!=‘*‘&& mark[tx][ty]==0) { mark[tx][ty]=1; node nwnode; nwnode.cnt=cur.cnt+1; nwnode.x=tx;nwnode.y=ty; que[qf++]=nwnode; if(mlink[tx][ty]!=-1) { dis[ mlink[tx][ty] ][ mlink[sx][sy] ]=nwnode.cnt; dis[ mlink[sx][sy] ][ mlink[tx][ty] ]=nwnode.cnt; } } } } } int main() { int T; int tt=1; scanf("%d",&T); int flag=0; while(T--) { if(flag) printf("\n"); flag=1; scanf("%d%d%d%d",&m,&n,&t,&tj); for(int i=0;i<tj;i++) scanf("%d",cost+i); for(int i=0;i<n;i++) { scanf("%s",g[i]); } memset(dis,-1,sizeof(dis)); memset(mlink,-1,sizeof(mlink)); int id=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(g[i][j]!=‘.‘&&g[i][j]!=‘*‘) { if(g[i][j]==‘@‘) mlink[i][j]=0; else if( g[i][j]==‘<‘) { id++; mlink[i][j]=tj+1; } else mlink[i][j]=g[i][j]-‘A‘+1; } } if(id>=2) { for(int i=0;i<100;i++) printf("%d\n",cost[i]); } for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(g[i][j]!=‘.‘&&g[i][j]!=‘<‘&&g[i][j]!=‘*‘) { bfs(i,j); } //////////// memset(dp,-1,sizeof(dp)); dp[0][0][1]=0; for(int i=1;i<=tj;i++) { for(int j=0;j<=tj;j++) { for(int k=0; k<(1<<(tj+1)) ;k++) { if(dp[i-1][j][k]!=-1 && dp[i-1][j][k] < t ) { for(int p=1;p<=tj;p++) { if( (k&(1<<p)) ==0 &&dis[j][p]!=-1) { if(dp[i][p][(k|(1<<p))]==-1) dp[i][p][k|(1<<p)] = dp[i-1][j][k]+dis[j][p]; else dp[i][p][(k|(1<<p))] = min(dp[i][p][(k|(1<<p))],dp[i-1][j][k]+dis[j][p]); } } } } } } int ans=-1; for(int i=0;i<=tj;i++) for(int j=0;j<=tj;j++) for(int k=0;k<(1<<(tj+1));k++) if(dp[i][j][k]!=-1&&dis[j][tj+1]!=-1) if(dp[i][j][k]+dis[j][tj+1]<=t) { int tmp=0; for(int p=1;p<=tj;p++) if( ((1<<p)&k)!=0 ) tmp+=cost[p-1]; ans=max(ans,tmp); } printf("Case %d:\n",tt++); if(ans==-1) printf("Impossible\n"); else printf("The best score is %d.\n",ans); } return 0; }
标签:des style blog http io color os ar java
原文地址:http://www.cnblogs.com/chenhuan001/p/4060199.html