• 挖地雷


    题目描述

          在一个地图上有N个地窖(N<=200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定路径都是单向的,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。

    输入

    第一行一个整数n表示有n个地窖 
    第二行有n个整数表示每个地窖的地雷数 
    以下有若干行,每行有两个数x,y表示x可以到y,保证x小于y。 
    最后一行有两个0,表示输入结束 

    输出

    第一行输出挖地雷的顺序。 
    第二行为最多挖出的地雷数 

    样例输入

    6
    5 10 20 5 4 5
    1 2
    1 4
    2 4
    3 4
    4 5
    4 6
    5 6
    0 0

    样例输出

    3-4-5-6
    34

    #include<bits/stdc++.h>

    using namespace std;

    int a[201],ans[201],ji[201];

    bool tu[201][201],zou[201];

    int n,x,y;

    int dfs(int k)

    {

             if(zou[k])

             {

                       return ans[k];

             }

             zou[k]=1;ans[k]=a[k];

             for(int i=1;i<=n;i++)

             {

                       if(tu[k][i]==1)

                       {

                                int jii=dfs(i);

                                if(jii+a[k]>ans[k])

                                {

                                         ans[k]=jii+a[k];

                                         ji[k]=i;

                                }

                       }

             }

             return ans[k];

    }

    int main()

    {

             cin>>n;

             for(int i=1;i<=n;i++)

             {

                       scanf("%d",&a[i]);

             }

             cin>>x>>y;

             while(x!=0&&y!=0)

             {

                       tu[x][y]=1;

                       cin>>x>>y;

             }

             for(int i=1;i<=n;i++)

             {

                       dfs(i);

             }

             int jians=ans[1],jii=1;

             for(int i=2;i<=n;i++)

             {

                       if(ans[i]>jians)

                       {

                                jians=ans[i];

                                jii=i;

                       }

             }

             cout<<jii;

             while(ji[jii])

             {

                       cout<<"-";

                       jii=ji[jii];

                       cout<<jii;

             }

             cout<<endl<<jians;

    }

  • 相关阅读:
    Linux下JDK的安装
    Docker 搭建 Maven 私服
    K8s 部署 PostgreSQL
    CentOS7 使用 kubeadm 部署 K8s(单机/集群)
    CentOS7 升级 Vim
    Go 函数详解
    CentOS7 安装 golang
    Redis 集群伸缩原理
    CentOS7 安装 Redis
    CentOS7 搭建 Redis 集群
  • 原文地址:https://www.cnblogs.com/fanhao050109/p/11203692.html
Copyright © 2020-2023  润新知