题目背景

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

动规,dp[i]表示到i点最大地雷数。

转移方程:if(vis[i][j]]) dp[i]=dp[j]+a[i]。a代表权值。

#include<bits/stdc++.h>
using namespace std;
const int maxn=25; //fa数组表示雷最大时时的路径,不断更新。
int n,dp[maxn],a[maxn],fa[maxn],mx=-1; //a数组表示每个地点埋的地雷。
bool vis[maxn][maxn]; //表示某两点是否连通。
int main(){
scanf("%d",&n);
for(register int i=1;i<=n;i++) scanf("%d",&a[i]);
for(register int i=1;i<=n-1;i++)
for(register int j=i+1;j<=n;j++){
int q;
scanf("%d",&q);
if(q==1) vis[i][j]=vis[j][i]=1;
}
dp[n]=a[n];
for(register int i=n-1;i>=1;i--){
int l=0,k=0; //k代表最大的点,l表示k点挖出的雷数。
for(register int j=i+1;j<=n;j++){
if(vis[i][j] && dp[j]>l){
l=dp[j];
k=j;
}
}
dp[i]=l+a[i];
fa[i]=k;
}
int k=1;
for(register int j=2;j<=n;j++)
if(dp[j]>dp[k]) k=j;
int ans=dp[k];
while(k!=0){
printf("%d ",k); //输出路径。
k=fa[k];
}
printf("\n");
printf("%d",ans);
return 0;
}

noip1998 提高组t3 挖地雷的更多相关文章

  1. JZOJ2020年8月11日提高组T3 页

    JZOJ2020年8月11日提高组T3 页 题目 Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场 ...

  2. 【GDKOI2014】JZOJ2020年8月13日提高组T3 壕壕的寒假作业

    [GDKOI2014]JZOJ2020年8月13日提高组T3 壕壕的寒假作业 题目 Description Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及 ...

  3. JZOJ2020年8月10日提高组T3 玩诈欺的小杉

    JZOJ2020年8月10日提高组T3 玩诈欺的小杉 题目 Description 是这样的,在小杉的面前有一个N行M列的棋盘,棋盘上有\(N*M\)个有黑白棋的棋子(一面为黑,一面为白),一开始都是 ...

  4. 【佛山市选2013】JZOJ2020年8月7日提高组T3 海明距离

    [佛山市选2013]JZOJ2020年8月7日提高组T3 海明距离 题目 描述 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR ...

  5. 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行

    [NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...

  6. 【NOIP2013提高组T3】加分二叉树

    题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ...

  7. NOIP1998 提高组

    [NOIP2002] 提高组 T2.联接数 算法:贪心+字符串处理 [问题分析]: 按整数对应的字符串大到小连接,因为题目的例子都符合,但是不难找到反例:12   121 应该组成12121而非121 ...

  8. Noip2001 提高组 T3

    T3 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包 ...

  9. NOIP1998提高组 题解报告

    T1 进制位 题目大意:自己看吧 首先让我们来看两个引理: 如果有解,则进制一定为\(n - 1\) 如果有解,则字母一定表示\(0\) 至 \(n - 1\) 的数 证明如下: 因为有 \(n - ...

随机推荐

  1. ruby puts语法

    str = "Welcom to china" str1 = str puts str + " 1" puts str1 + " 1" de ...

  2. QT多线程学习

    一.想要使用Qthread必须先创建,继承Qthread的类. #ifndef THREADTEST_H #define THREADTEST_H #include <QThread> # ...

  3. layui导出表格全部数据

    layui自带的导出表格,只能导出当前页面,如果当前页包含全部数据,那不就是导出全部数据了吗,所以我给导出事件单独定义了一个请求,当触发这个请求时,在后台查询数据时不要按接收的page 和 limit ...

  4. mapreduce求共同好友

    逻辑分析 以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的) A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E: ...

  5. BZOJ 3653: 谈笑风生(主席树)

    传送门 解题思路 首先对于一个\(a\)来说,要求\(b\)和\(c\),那么\(a,b,c\)一定在一条链上.把\(b\)分类讨论,如果\(b\)是\(a\)的祖宗,这个方案数就很好统计了,就是\( ...

  6. 人物-IT-周鸿祎:百科

    ylbtech-人物-IT-周鸿祎:百科 周鸿祎(zhōu hóng yī),1970年10月4日生于湖北省黄冈市蕲春县.360公司创始人.董事长兼CEO.奇酷CEO.九三学社中央委员.九三学社中央科 ...

  7. spring+freemarker 乱码解决办法

    这样应该可以了~ <!-- freemarker config --> <bean id="freemarkerConfig" class="org.s ...

  8. 发送验证码倒计时60s

    var wait=60; function time(o) { if (wait == 0) { o.removeClass("gray"); o.text("发送验证码 ...

  9. 25. 服务器性能监控之nmon工具介绍

    nmon介绍: nmon是一个简单的性能监测工具,可以监测CPU.内存.网络等的使用情况. 步骤: 1.下载nmon(根据你的操作系统下载),地址 2.nmon文件部署到服务器中 3.启动nmon(注 ...

  10. ES6 基础内容介绍

    参考博客: https://www.cnblogs.com/libin-1/p/6716470.html 一.新的变量声明方式 let/const 与var不同,新的变量声明方式带来了一些不一样的特性 ...