挖地雷dp c++
时间:2020-04-27
本文章向大家介绍挖地雷dp c++,主要包括挖地雷dp c++使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 // 2 // Created by Arc on 2020/4/27. 3 // 4 5 /*题文: 6 * 在一个地图上有n个地窖 7 * ,每个地窖中没有一定数量的地雷, 8 * 同时给出地窖之间连接的路径, 9 * 并规定路径都是单向的。 10 * 且保证都是小序号地窖指向大序号地窖, 11 * 也不存在可以从一个地窖出发,经过若干后又回到原来地窖的路径 12 * 某人可以从任意一处开始挖地雷,然后沿着指出的路径往下挖,只能选择一条路径,当没有连接时,挖地雷工作结束设计,一个挖地雷的方案使他能挖到最多的地雷 13 * 输入: 14 * 第一行为坑总数 15 * 第二行为每个坑的地雷数 16 * 接下来的几行是都有哪两个坑可以连接, 17 * 输入0 0 表示结束 18 * 输出: 19 * 最大地雷数以及路径 20 * (一看见这种路径,是不是直接想到一个数组存放地址啊) 21 22 */ 23 //思路: 24 //我们知道dp有个无后效性原则 25 //你看看上面题目: 26 //规定路径都是单向的。 27 //* 且保证都是小序号地窖指向大序号地窖, 28 //* 也不存在可以从一个地窖出发,经过若干后又回到原来地窖的路径 29 //--很明显了啊 30 // 31 // 32 /*存放变量: 33 * 和前面的dp几乎一样,也是从倒数第二个逆推 34 * w[i]是指每个坑有几个地雷 35 * a[i][j]是指i,j之间是否有通路//和城市交通线不同,这个地方不是没有通路就为0,所以输入方式也不太一样 36 * f[i]表示i往后的最多能挖到多少 37 * c[i]是个存放位置的. 38 */ 39 #include<bits/stdc++.h> 40 using namespace std; 41 int main(){ 42 long f[201]={0},w[201]={0},c[201]; 43 bool a[201][201]={0}; 44 long n; 45 long x,y; 46 memset(a,false,sizeof(a)); 47 cin>>n; 48 for (int i = 1; i <=n ; ++i) {//每个坑的地雷数 49 cin>>w[i]; 50 51 } 52 do{ 53 cin>>x>>y; 54 if((x!=0)&&(y!=0)){ 55 a[x][y]=true; 56 } 57 58 }while((x!=0)||(y!=0)); 59 f[n]=w[n];//初始值 60 for (int j = n-1; j >= 1; j--) { 61 int l=0; 62 for (int i = j+1; i <=n ; ++i) { 63 if(a[j][i] && (l<f[i])){ 64 l=f[i]; 65 c[j]=i; 66 } 67 68 } 69 f[j]=l+w[j];//本次最长等于本坑地雷数加后面的 70 71 72 } 73 int k=1; 74 for (int m = 2; m <= n; ++m) { 75 if(f[m]>f[k]) 76 { 77 k=m; 78 } 79 } 80 cout<<f[k]<<endl; 81 cout<<k; 82 k=c[k]; 83 while(k!=0){ 84 cout<<"-"<<k; 85 k=c[k]; 86 87 } 88 return 0; 89 90 91 }
原文地址:https://www.cnblogs.com/zhmlzhml/p/12785786.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux通用java程序启动脚本代码实例
- 如何解决Ubuntu18.04循环登录/卡在开机界面/无法进入图形界面的问题
- CentOS7连接XShell与网络配置的方法
- 如何监控 Linux 服务器状态的方法
- Linux 文件系统的操作实现
- win10系统下安装superset的步骤
- Ubuntu下使用python3中的venv创建虚拟环境
- vsftpd配置虚拟用户登录的方法
- Linux 删除特殊字符文件名或目录的方法
- 详解Linux环境变量配置全攻略
- Linux lsof命令使用详解
- Ubuntu删除多余内核的方法
- 详解Linux下crontab的使用与注意事项
- Linux内核设备驱动之Linux内核基础笔记整理
- Ubuntu18.04 Server版安装及使用(图文)