Colorful Wolves
题意:
有一只狼可以把自己的颜色在 n n 种颜色之间切换,每次切换需要花费一天的时间,颜色编号为 0∼n−1 0 ∼ n − 1 ,给定 n×n n × n 的由 ‘Y‘ ′ Y ′ 和 ‘N‘ ′ N ′ 组成的字符矩阵 colormap c o l o r m a p , colormap[i][j]=‘Y‘ c o l o r m a p [ i ] [ j ] = ′ Y ′ 表示狼可以从颜色 i i 切换到颜色 j j 。
每一天,如果他不能改变自己的颜色,他会保持自己的颜色不变,
否则,他会变成能变成的编号最小的颜色。
第 0 0 天狼的颜色为 0 0 ,他想变成颜色 n−1 n − 1 ,你需要通过修改 colormap c o l o r m a p 来完成这一目标。
也就是说,你可以花费 1 1 单位代价来把某个位置的 ‘Y‘ ′ Y ′ 改成 ‘N‘ ′ N ′ 。
求最小花费,若无法完成目标,返回 −1 − 1 。
2≤n≤50 2 ≤ n ≤ 50
思路:
最短路
因为只能变成编号最小的,就有一定的拓扑序,那么跑个最短路即可。
由于n只有50,即floryd就可以轻松切掉此题。
code:
#define N 55
int n;
char s[N][N];
int dp[N][N];
int main(){
scanf("%d",&n);
bool flag=0;
REP(i,1,n){
int cnt=0;
scanf("%s",s[i]+1);
REP(j,1,n)dp[i][j]=s[i][j]=='Y'?(cnt++):INF;
}
REP(k,1,n) REP(i,1,n) REP(j,1,n)chkmin(dp[i][j],dp[i][k]+dp[k][j]);
printf("%d\n",dp[1][n]==INF?-1:dp[1][n]);
return 0;
}