[SCOI2009]最长距离

[SCOI2009]最长距离

https://ac.nowcoder.com/acm/problem/20270

100%的数据,满足1<=N,M<=30,0<=T<=30---来自洛谷的数据范围.
简单来说就是暴力,暴力枚举一个点,然后再算到其他点的之间最少需要移除多少障碍物.然后就结束了.

#include <bits/stdc++.h>
using namespace std;
const int N=32;
char s[N][N];
int n,m,t,w[N][N],dis[N][N];
int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};
void dfs(int x,int y,int cnt)
{
    //cout<<x<<' '<<y<<endl;
    if(cnt>=dis[x][y])    return;
    if(cnt>t)            return;
    dis[x][y]=cnt;
    for(int i=0;i<4;i++)
    {
        int tx=x+dx[i],ty=y+dy[i];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=m)    dfs(tx,ty,cnt+w[tx][ty]);
    }
}

int main()
{
    int ans=0;
    scanf("%d%d%d",&n,&m,&t);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>s[i][j];
            w[i][j]=s[i][j]-'0';
        }
    }
    for(int h1=1;h1<=n;h1++)
    {
        for(int l1=1;l1<=m;l1++)
        {
            memset(dis,0x3f,sizeof dis);
            int sum;
            w[h1][l1]==1?sum=1:sum=0;
            dfs(h1,l1,sum);
            for(int h2=1;h2<=n;h2++)
            {
                for(int l2=1;l2<=m;l2++)
                {
                    if(dis[h2][l2]<=t)
                    {
                        ans=max(ans,(h2-h1)*(h2-h1)+(l2-l1)*(l2-l1));
                    }
                }
            }
        }
    }
    printf("%.6lf\n",sqrt(ans));
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-17 14:38
干个蛋,干不了一点!!!!我真服了,还没搞完,很急。&nbsp;今天ddl,活没干完直接通宵,刺激。食堂很好吃,感觉离职的时候会胖10斤。mt喜欢能直接干活的,没空指导我,很难受。每个人都是笑嘻嘻的,但是从他们聊天中都能感受到各种试探,我有点慌了大家真的nb,都能准时完成工作下班,我羡慕啊!!!!!每天好累,想离职了💔
牛客26106072...:能去字节实习说明你的能力挺被认可的,实习中的这种累更有利于个人职场成长,试着当熬夜打游戏一样熬一熬,实习的意义就是看自己的差距和适应能力,总比等到工作时各种不适应辞职要好得多吧?
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务