当前位置: 首页 > wzjs >正文

做的比较好的个人网站北京免费自己制作网站

做的比较好的个人网站,北京免费自己制作网站,网站建设技术外文,如何建设招聘网站P2196 [NOIP 1996 提高组] 挖地雷 - 洛谷 题目描述 在一个地图上有N(N ≤ 20)个地窖,每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷&#…

P2196 [NOIP 1996 提高组] 挖地雷 - 洛谷

题目描述

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

输入格式

有若干行。

  • 第1行只有一个数字,表示地窖的个数N。
  • 第2行有N个数,分别表示每个地窖中的地雷个数。
  • 第3至第N + 1行表示地窖之间的连接情况:
    • 第3行有n - 1个数(0或1),表示第一个地窖至第2个、第3个…第n个地窖有否路径连接。如第3行为11000…0,则表示第1个地窖至第2个地窖有路径,至第3个地窖有路径,至第4个地窖、第5个…第n个地窖没有路径。
    • 第4行有n - 2个数,表示第二个地窖至第3个、第4个…第n个地窖有否路径连接。
    • ……
    • 第n + 1行行1个数,表示第n - 1个地窖至第n个地窖至第n个地窖有否路径连接。(为0表示没有路径,为1表示有路径)

输出格式

  • 第一行表示挖得最多地雷时的挖地雷的顺序,各地窑序号间以一个空格分隔,不得有多余的空格。
  • 第二行只有一个数,表示能挖到的最多地雷数。

输入输出样例

输入 #1输出 #1
5
10 8 4 7 6
1 1 0 0
0 1
1
1
1 3 4 5
27

说明/提示

【题目来源】
NOIP 1996 提高组第三题

思路:

状态定义

设 dp[i] 表示以 节点 i 为终点 的路径能挖到的最大地雷数。

  • 对于节点 i,其路径可以是:
    • 单独以 i 为起点,此时地雷数为 cnt[i]
    • 从某个前驱节点 jj < i 且 attached[j][i] = 1)出发,经过路径 j→i,此时地雷数为 dp[j] + cnt[i]

状态转移方程

代码:

记忆化搜索:

#include<bits/stdc++.h>
using namespace std;
int cnt[35], mem[35], pre[35];  // mem 存储记忆化结果,pre 记录前驱
int attached[35][35];// 记忆化搜索函数:返回以 x 为终点的最大地雷数
int dfs(int x) 
{if (mem[x] != -1) return mem[x];  mem[x] = cnt[x];  // 初始值:至少包含自己的地雷数for (int j = 1; j < x; j++) // 遍历所有前驱节点(j < x) {     if (attached[j][x]) // 存在 j->x 的路径 {        int current = dfs(j) + cnt[x];  // 计算从 j 到 x 的总地雷数if (current > mem[x])  // 更新最大值和前驱 {  mem[x] = current;pre[x] = j;}}}return mem[x];
}
void print(int x) 
{if (pre[x] != 0) print(pre[x]);  cout << x << " ";
}
int main() 
{int n;cin >> n;memset(mem, -1, sizeof(mem));for (int i = 1; i <= n; i++) {cin >> cnt[i];pre[i] = 0;}for (int i = 1; i <= n - 1; i++) {for (int j = i + 1; j <= n; j++) {int temp;cin >> temp;attached[i][j] = temp;}}int max_val = -1, end_node = 1;for (int i = 1; i <= n; i++) {int current = dfs(i);  // 计算以 i 为终点的最大地雷数if (current > max_val) {max_val = current;end_node = i;}}print(end_node);cout << endl << max_val << endl;return 0;
}

dp:

#include<bits/stdc++.h>
using namespace std;
int cnt[30],dp[30],pre[30];//设 dp[i] 表示以 节点 i 为终点 的路径能挖到的最大地雷数。pre[30]记录前驱结点 
int attached[30][30];
void dfs(int x)
{if(pre[x] != 0)dfs(pre[x]);cout << x << " ";//可以输出最后一个元素 
}
int main(void)
{int n;cin >> n;for(int i = 1 ; i <= n ; i++){cin >> cnt[i];pre[i] = 0;//初始化前驱节点 }for(int i = 1 ; i <= n-1; i++){for(int j = i + 1 ; j <= n ; j++){int temp;cin >> temp;attached[i][j] = temp;}}for(int i = 1 ; i <= n ; i++)dp[i] = cnt[i];for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j < i ; j++){if(attached[j][i]){if(dp[j] + cnt[i] > dp[i]){dp[i] = dp[j] + cnt[i];pre[i] = j;	}	}	}	}int max_val = -1, end_node = 1;for(int i = 1; i <= n; i++) {if(dp[i] > max_val) {max_val = dp[i];end_node = i;}}dfs(end_node);cout << endl;cout << max_val << endl;return 0;
}
#include<bits/stdc++.h>
using namespace std;
int cnt[30],dp[30],pre[30];//设 dp[i] 表示以 节点 i 为终点 的路径能挖到的最大地雷数。pre[30]记录前驱结点 
int attached[30][30];
void dfs(int x)
{if(pre[x] == 0){cout << x << " ";return;}dfs(pre[x]);cout << x << " ";
}
int main(void)
{int n;cin >> n;for(int i = 1 ; i <= n ; i++){cin >> cnt[i];pre[i] = 0;//初始化前驱节点 }for(int i = 1 ; i <= n-1; i++){for(int j = i + 1 ; j <= n ; j++){int temp;cin >> temp;attached[i][j] = temp;}}for(int i = 1 ; i <= n ; i++)dp[i] = cnt[i];for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j < i ; j++){if(attached[j][i]){if(dp[j] + cnt[i] > dp[i]){dp[i] = dp[j] + cnt[i];pre[i] = j;	}	}	}	}int max_val = -1, end_node = 1;for(int i = 1; i <= n; i++) {if(dp[i] > max_val) {max_val = dp[i];end_node = i;}}dfs(end_node);cout << endl;cout << max_val << endl;return 0;
}


文章转载自:

http://q5hqEQFr.nhpmn.cn
http://qkn0r0t0.nhpmn.cn
http://sBPN19qN.nhpmn.cn
http://FVHwHazz.nhpmn.cn
http://jDqmHKpq.nhpmn.cn
http://lNDIVwES.nhpmn.cn
http://AcMmoQ04.nhpmn.cn
http://gN814Ebx.nhpmn.cn
http://P3dIviZV.nhpmn.cn
http://LxneGRF6.nhpmn.cn
http://cDcn1Fc8.nhpmn.cn
http://migU1es8.nhpmn.cn
http://WRc13I9G.nhpmn.cn
http://g9nRlbT7.nhpmn.cn
http://HPYVEBue.nhpmn.cn
http://Nn04fNn5.nhpmn.cn
http://mAWi58Zf.nhpmn.cn
http://UUGTPIJ3.nhpmn.cn
http://Rtjy2ljO.nhpmn.cn
http://VZE9jzAd.nhpmn.cn
http://703siUOs.nhpmn.cn
http://9iOERMSc.nhpmn.cn
http://VvZojwRB.nhpmn.cn
http://DxcCl5mu.nhpmn.cn
http://NqirXujN.nhpmn.cn
http://G4W0olxZ.nhpmn.cn
http://SjeCiTqS.nhpmn.cn
http://rXVbbM9l.nhpmn.cn
http://gfmYFqDw.nhpmn.cn
http://2IaZdO6G.nhpmn.cn
http://www.dtcms.com/wzjs/703111.html

相关文章:

  • 网站做直链下载存储解决方案平面设计类网站有哪些
  • 头条淘宝联盟网站推广怎么做网站图片 优化
  • 昌平建设网站包头市建设局网站
  • 网站开发的收入网站上传的流程
  • 承德工程建设信息网站做网站的公司一年能赚多少钱
  • h5网站和传统网站区别宠物app页面设计
  • 云南SEO网站建设网页制作与设计教材
  • 南宁做网站哪家好asp.net网站安装顺序
  • 清远做网站的怎样进入公众号平台
  • 营销网站建站企业海口网红景点
  • 外卖网站怎么做域名搜索引擎入口
  • 顺德定制网站设计昆明官网seo服务
  • 广州网站建设网站托管运营长沙互联网企业
  • 潮州营销型网站建设推广几何背景生成器网站
  • 做订阅号要建立网站吗群辉做网站服务器python
  • uzi粉丝做的网站常用的北京文化馆设计公司
  • 做网站前后端的发布流程青岛代理记账公司有哪些
  • 景德镇建设局网站筑云网站投诉
  • 中小企业网站建设公司上海平台网站建设公司排名
  • 吉林系统建站怎么用php网站开发路线
  • 温州网站建设策划网站代备案管理系统
  • 末年人免费观看网站郴州网站建设哪里比较好
  • 做毕业设计哪个网站好广告传媒公司主要做什么
  • 网站外链软件班级网站设计模板
  • 有什么教做维c甜品的网站快速排名seo软件
  • 免费网站设计平台易语言网站批量注册怎么做
  • 中国中小企业网站网址导航下载到桌面
  • 宁波网站建设制作订做网络维护工资多少一个月
  • 住建部网站村镇建设管理平台社群营销
  • 做免费采集电影网站犯法吗高碑店做网站的公司