题目背景

NOIp1996提高组第三题

题目描述

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

输入输出格式

输入格式:
输入文件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表示有路径)。 输出格式:
输出文件wdl.out有两行数据。 第一行表示挖得最多地雷时的挖地雷的顺序,各地窖序号间以一个空格分隔,不得有多余的空格。 第二行只有一个数,表示能挖到的最多地雷数。 输入输出样例 输入样例#1: 复制
5
10 8 4 7 6
1 1 1 0
0 0 0
1 1
1
输出样例#1: 复制
1 3 4 5
27

数据很小,可以用一用 生疏的 DFS做,也是很快的。

既然数据小,邻接矩阵完全可行。

答案输出就是一个链表。

//Writer:GhostCai && His Yellow Duck

#include<iostream>
using namespace std; const int MAXN=25; int link[MAXN][MAXN];
int w[MAXN];
int n; int son[MAXN];
int dfs(int id){
int ans=0,ansid=id,tmp;
for(int i=1;i<=n;i++){
if(link[id][i]&&i>id){
tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
son[id]=i;
}
}
}
return ans+w[id];
} int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
cin>>link[i][j];
}
}
int ans=0,ansid;
for(int i=1;i<=n;i++){
int tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
}
}
while(ansid){
cout<<ansid<<" ";
ansid=son[ansid];
}
cout<<endl<<ans<<endl; }

正解当然是DP,就是一个DAG

注意每步比上步序号大。

//Writer:GhostCai && His Yellow Duck

#include<iostream>
using namespace std; const int MAXN=25; int link[MAXN][MAXN];
int f[MAXN];
int w[MAXN];
int n; int son[MAXN];
int dfs(int id){
int ans=0,ansid=id,tmp;
for(int i=1;i<=n;i++){
if(link[id][i]&&i>id){
tmp=dfs(i);
if(tmp>ans){
ans=tmp;
ansid=i;
son[id]=i;
}
}
}
return ans+w[id];
} int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i],f[i]=w[i];
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
cin>>link[i][j];
}
}
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++){
if(link[i][j]&&f[j]+w[i]>f[i]){
f[i]=f[j]+w[i];//!!w[j]
son[i]=j;
}
}
}
int ans=0,ansid;
for(int i=1;i<=n;i++){
if(f[i]>ans){
ans=f[i];
ansid=i;
}
}
while(ansid){
cout<<ansid<<" ";
ansid=son[ansid];
}
cout<<endl<<ans<<endl; }

[LUOGU] P2196 挖地雷的更多相关文章

  1. 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]

    P2196 挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之 ...

  2. 「 Luogu P2196 」 挖地雷

    # 解题思路 跑 $\text{n}$ 遍 $\text{spfa}$ 并记录路径,找到比当前最长路长的就更新答案,并且将路径也更新,注意起点的处理. # 附上代码 #include <iost ...

  3. 洛谷—— P2196 挖地雷

    https://www.luogu.org/problem/show?pid=2196 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定 ...

  4. 洛谷 p2196 挖地雷 题解

    好久没有写博客了,今天水几篇博客 传送门 挖地雷这个题之前在  信息学奥赛一本通  上做过几乎一样的题,但是由于数据太水导致我当时过了,进而导致我昨天(4.28)考试丢了20分,今天写一篇题解 这个挖 ...

  5. P2196 挖地雷

    题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...

  6. 洛谷——P2196 挖地雷

    题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...

  7. 洛谷P2196 挖地雷(dp)

    题意 题目链接 Sol 早年NOIP的题锅好多啊.. 这题连有向边还是无向边都没说(害的我wa了一遍) 直接\(f[i]\)表示到第\(i\)个点的贡献 转移的时候枚举从哪个点转移而来 然后我就用一个 ...

  8. 洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)

    传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保 ...

  9. 洛谷 P2196 挖地雷

    题目传送门 解题思路: 记忆化搜索,题目比较坑的地方在于,这是个有向图,给的边是单向边!!!!!!!! AC代码: #include<iostream> #include<cstdi ...

随机推荐

  1. ZOJ 4033 CONTINUE...?(The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple)

    #include <iostream> #include <algorithm> using namespace std; ; int a[maxn]; int main(){ ...

  2. AOP 应用

    AOP 的核心:解耦 1. 权限认证2. 事务3. 日志4. Lazy loading 懒加载5. Context Process 上下文处理6. Error Handler 错误追踪(异常捕获)7. ...

  3. 在项目中移除CocoaPods

    如果你觉得CocoaPods让你的项目出现了问题,不好用甚至是恶心,想将其从项目中彻底移除,也有方法: 1.删除工程文件夹下的Podfile.Podfile.lock和Pods文件夹. 2.删除xcw ...

  4. 根据日期计算发布时间段(NSCalendar)

    // 返回发布时间dateWithString - (NSString *)backReleaseTimeWithDateStr:(NSString *)dateWithString{ // 获取当前 ...

  5. Integer一类的比较问题

    总体主要分为两个方面 ①比较的是值 一.基本数据类型与引用数据类型进行比较时,引用数据类型会进行拆箱(自动拆装箱需要在jdk1.5以上),然后与基本数据类型进行值的比较 举例: int i = 12; ...

  6. Win10系统特别卡的一个原因

    我遇到的Win10特别卡的原因是它自带的一个杀毒软件 迈克菲(McAfee)导致的,在卸载之前电脑真的特别卡,打开一个窗口都卡,,卸载了之后瞬间感觉电脑飞起来了.... 当然还有很多原因会导致电脑卡, ...

  7. springmvc 实现原理与struts2原理的区别

    spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. spring mvc是基于方法的设计,sturts2是基于类设计的. springmvc将ur ...

  8. [转]Formatting the detail section to display multiple columns (水晶报表 rpt 一页多列)

    本文转自:http://www.bofocus.com/formatting-the-detail-section-to-display-multiple-columns/ Format the de ...

  9. h5旋转效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. arcgis jsapi接口入门系列(10):图形高亮

    jsapi也有提供高亮的实现接口,但这里没用,而用的是一种改变图形(graphic)样式的思路 本文实现效果是:地图有多个面图形,当鼠标移动到面的上方,面高亮显示,鼠标移出后高亮解除 初始化 //高亮 ...