zoukankan      html  css  js  c++  java
  • 挖地雷

    题目描述

          在一个地图上有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;

    }

  • 相关阅读:
    【翻译】Longest Palindromic Substring 最长回文子串
    java三大框架学习总结(1)
    select XXX into 和 Insert into XXX select
    在WinForm编程中犯的一些错误
    自定义类型数组排序的两种实现方式
    C# 释放非托管资源
    在已创建的DataTable对象中添加在首列一列
    WinForm编程时窗体设计器中ComboBox控件大小的设置
    php处理序列化jQuery serializeArray数据
    谈谈对程序员的培养
  • 原文地址:https://www.cnblogs.com/fanhao050109/p/11203692.html
Copyright © 2011-2022 走看看