SRM551 Div1 Medium

Colorful Wolves

题意:

有一只狼可以把自己的颜色在 n n 种颜色之间切换,每次切换需要花费一天的时间,颜色编号为0n1,给定 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

每一天,如果他不能改变自己的颜色,他会保持自己的颜色不变,
否则,他会变成能变成的编号最小的颜色。
0 0 天狼的颜色为0,他想变成颜色 n1 n − 1 ,你需要通过修改 colormap c o l o r m a p 来完成这一目标。
也就是说,你可以花费 1 1 单位代价来把某个位置的Y改成 'N' ′ N ′
求最小花费,若无法完成目标,返回 1 − 1

2n50 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值