5294 挖地雷

news/2024/8/26 8:47:45

5294 挖地雷

 时间限制: 1 s

 空间限制: 1000 KB
 题目等级 : 黄金 Gold  
 
题目描述  Description

在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从第一个地窖开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。

输入描述  Input Description

输入文件mine.in有若干行。

第1行只有一个数字,表示地窖的个数N。

第2行有N个数,分别表示每个地窖中的地雷个数。

第3行至第N+1行表示地窖之间的连接情况:

第3行有n-1个数(0或1),表示第一个地窖至第2个、第3个、…、第n个地窖有否路径连接。如第3行为1 1 0 0 0 … 0,则表示第1个地窖至第2个地窖有路径,至第3个地窖有路径,至第4个地窖、第5个、…、第n个地窖没有路径。

第4行有n-2个数,表示第二个地窖至第3个、第4个、…、第n个地窖有否路径连接。

… …

第n+1行有1个数,表示第n-1个地窖至第n个地窖有否路径连接。(为0表示没有路径,为1表示有路径)。

 

输出描述  Output Description

输出文件wdl.out有两行数据。

第一行表示挖得最多地雷时的挖地雷的顺序,各地窖序号间以一个空格分隔,不得有多余的空格。

第二行只有一个数,表示能挖到的最多地雷数。

 

样例输入  Sample Input

   

5
10 8 4 7 6
1 1 1 0
0 0 0
1 1
1

 

样例输出  Sample Output

   

1 3 4 5
27

 

数据范围及提示  Data Size & Hint

(N<=20)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int di[30];
 5 int map[30][30];
 6 int pre[30];  //前驱 
 7 int f[30];
 8 int n,m,maxn,ans,w,c;
 9 bool flag; 
10 void print(int a)  //输出 
11 {
12     if(!a)return ;
13     print(pre[a]);
14     cout<<a<<" ";
15 }
16 int main()
17 {
18     cin>>n;
19     for(int i=1;i<=n;++i)cin>>di[i];
20     for(int i=1;i<n;++i)
21         for(int j=i+1;j<=n;++j)
22         {
23             cin>>m;
24             if(m==1)
25             {
26                 map[j][i]=1;flag=1;
27             }
28         }
29     if(!flag)  //特判 
30     {
31         for(int i=1;i<=n;++i)
32         {
33             if(di[i]>=ans)  //等号不能少 
34             {
35                 ans=di[i];
36                 c=i;
37             }
38         }
39         cout<<c<<endl<<ans;
40         return 0;
41     }
42     f[1]=di[1];
43     for(int i=2;i<=n;++i)
44     {
45         maxn=0;
46         for(int j=1;j<=i;++j)
47         {
48             if(f[j]>maxn&&map[i][j])
49             {
50                 maxn=f[j];
51                 f[i]=f[j]+di[i];
52                 c=j;
53             }
54         }
55         pre[i]=c;
56         if(f[i]>ans)
57         {
58             ans=f[i];
59             w=i;
60         }
61     }
62     print(w);
63     cout<<endl<<ans;
64     return 0;
65 } 

 

转载于:https://www.cnblogs.com/mjtcn/p/6764212.html


http://www.niftyadmin.cn/n/1791005.html

相关文章

sysbench的框架实现介绍

sysbench是一个非常经典的综合性能测试工具&#xff0c;它支持CPU&#xff0c;IO&#xff0c;内存&#xff0c;尤其是数据库的性能测试。那它是怎么做到通用性的呢&#xff0c;总结一句话是大量运用了重载的方法。 sysbench总体架构 sysbench是一个总体框架&#xff0c;它用来操…

Appium Android Bootstrap源代码分析之简单介绍

在上一个系列中我们分析了UiAutomator的核心源代码&#xff0c;对UiAutomator是怎么执行的原理有了根本的了解。今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium的源代码分析之旅。本文在真个系列中会扮演一个简单介绍的角色&#xff0c;不会分析不论什么…

Friedman test 和 Bonferroni-Dunn test 整理

Friedman test 和 Bonferroni-Dunn test 是作者写论文时遇到的,经查阅相关文献&#xff0c;内容整理如下&#xff0c;如有错误&#xff0c;还望指正。

webservice接口与HTTP接口学习笔记

一、webservice 的概念 Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口&#xff0c;它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换…

公司某项眼下端技术积累

最佳实践 BootStrap jquery jquery插件 sea.js/require.js Grunt 前期技术选型 BootStrap Backbone.js require.js jquery插件ExtJSAngular.jsBootStrap jquery jquery插件前端技术选型总结&#xff1a; 之所以选择 BootStrap jquery jquery插件 的原因是由于ExtJS或…

Python学习【第18篇】:进程理论基础

进程理论基础背景知识 顾名思义&#xff0c;进程即一个软件正在进行的过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统&#xff0c;是操作系统最核心的概念&#xff0c;也是操作系统提供的最古老的也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕…

力扣第88题:合并两个有序数组

给你两个有序整数数组 nums1 和 nums2&#xff0c;请你将 nums2 合并到 nums1 中&#xff0c;使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间&#xff08;空间大小大于或等于 m n&#xff09;来保存 n…

python语句与语法

Python的语句与语法 语句角色例子赋值创建引用值aApple,bbike调用执行函数log.write(mylog)打印调用打印对象print(1,hello)if/elif/else选择动作if a in b: print(a)for/else序列迭代for i in list: print(i)while/else一般循环while True: print(True)pass空占位符for i in l…