标签:des style http color os io for ar art
5 5 GDDSS SSSFS SYGYS SGSYS SSYSS 0 0
4
#include <stdio.h>
#define max(A,B)(A>B?A:B)
#define INF 999999999
struct S{
int x,y,step;
}que[1000000],t;
char mp[15][20];
int n,m,dis[15][15],d[20][20],type[20],pos[20],cnt,ok,dp[1<<16][20],nxt[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
bool vis[15][15];
void bfs(int sx,int sy)
{
int i,j,top=0,bottom=1;
for(i=0;i<n;i++) for(j=0;j<m;j++) vis[i][j]=0,dis[i][j]=INF;
que[0].x=sx;
que[0].y=sy;
que[0].step=0;
dis[sx][sy]=0;
vis[sx][sy]=1;
while(top<bottom)
{
t=que[top];
t.step++;
for(i=0;i<4;i++)
{
t.x+=nxt[i][0];
t.y+=nxt[i][1];
if(t.x>=0 && t.x<n && t.y>=0 && t.y<m && mp[t.x][t.y]!='D' && !vis[t.x][t.y])
{
vis[t.x][t.y]=1;
dis[t.x][t.y]=t.step;
que[bottom++]=t;
}
t.x-=nxt[i][0];
t.y-=nxt[i][1];
}
top++;
}
}
bool check(int x)
{
int i,j,k;
for(i=0;i<(1<<cnt);i++) for(j=0;j<cnt;j++) dp[i][j]=-1;
for(i=0;i<cnt;i++)//起点到G、Y之后剩下的能量
{
dp[1|(1<<i)][i]=x-d[0][i];
if(type[i]==1 && dp[1|(1<<i)][i]>=0) dp[1|(1<<i)][i]=x;
}
for(i=1;i<(1<<cnt);i++)
{
if((i&1)==0) continue;//起点不在集合内
for(j=0;j<cnt;j++)
{
if(dp[i][j]<0) continue;//该状态不能扩展
if((i&ok)==ok) return 1;
if(i&(1<<j))//j在集合内
{
for(k=1;k<cnt;k++)
{
if((i&(1<<k))==0)//k不在集合内
{
if(dp[i][j]>=d[j][k])
{
dp[i|(1<<k)][k]=max(dp[i|(1<<k)][k],dp[i][j]-d[j][k]);
if(type[k]==1) dp[i|(1<<k)][k]=x;//如果是能量池
}
}
}
}
}
}
return 0;
}
int main()
{
int i,j;
while(~scanf("%d%d",&n,&m) && n)
{
for(i=0;i<n;i++) scanf("%s",mp[i]);
cnt=1;
ok=0;
for(i=0;i<n;i++) for(j=0;j<m;j++)
{
if(mp[i][j]=='F')
{
ok|=1;
type[0]=0;
pos[0]=i*20+j;
}
else if(mp[i][j]=='G')
{
type[cnt]=1;
pos[cnt]=i*20+j;
cnt++;
}
else if(mp[i][j]=='Y')
{
ok|=(1<<cnt);
type[cnt]=2;
pos[cnt]=i*20+j;
cnt++;
}
}
for(i=0;i<cnt;i++)
{
bfs(pos[i]/20,pos[i]%20);
for(j=0;j<cnt;j++) d[i][j]=dis[pos[j]/20][pos[j]%20];
}
int l,r,mid,ans;
l=0;
ans=r=n*m;
while(l<=r)
{
mid=(l+r)>>1;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",ans<n*m?ans:-1);
}
}
HDU-3681-Prison Break(BFS+状压DP+二分)
标签:des style http color os io for ar art
原文地址:http://blog.csdn.net/faithdmc/article/details/38894797