SRM551 Div1Medium ColorfulWolves

来源:互联网 发布:linux c 编译器 编辑:程序博客网 时间:2024/06/08 13:17

这题还是比较水的
由于在每一个点改变colormap值时对接下来的点能否到达其他点其他点是没有影响的
所以对于colormapi,j=Y的点来说,
狼变成这一颜色所花费的代价就是jk=1colormapi,k==Y
于是跑一边Floyd就能求出最小代价了
代码如下:

#include<bits/stdc++.h>using namespace std;#define M 55#define oo 1000000000char str[M];int dp[M][M];int main(){    int n;    scanf("%d",&n);    for(int i=0;i<n;i++){        int cnt=0;        scanf("%s",str);        for(int j=0;j<n;j++){            if(str[j]=='Y')dp[i][j]=cnt++;            else dp[i][j]=oo;        }    }//预处理    for(int k=0;k<n;k++)        for(int i=0;i<n;i++)            for(int j=0;j<n;j++)                if(dp[i][j]>dp[i][k]+dp[k][j])                    dp[i][j]=dp[i][k]+dp[k][j];//Floyd    if(dp[0][n-1]!=oo)printf("%d",dp[0][n-1]);    else puts("-1");    return 0;}
3 0
原创粉丝点击