动态规划---挖地雷
来源:互联网 发布:苹果mac如何装虚拟机 编辑:程序博客网 时间:2024/06/05 09:16
一、问题描述
在一个地图上有n个地窖(n<=200),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径,并规定
路径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原
来地窖的路径。某人可以从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖
地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。
【输入】
第一行:地窖的个数;
第二行为依次每个地窖地雷的个数;
下面若干行:
xi yi //表示从xi可到yi,xi<yi。
最后一行为"0 0"表示结束。
【输出】
k1-k2-…-kv //挖地雷的顺序
挖到最多的雷。
【输入样例】
【输出样例】
二、算法分析
三、代码实现
/*
6
5 10 20 5 4 5
1 2
1 4
2 4
3 4
4 5
4 6
5 6
0 0
*/
#include<iostream>
#include<cstring>
#define MAXN 200
using namespace std;
bool a[MAXN][MAXN];//a[i][j]表示第i个地窖和第j个地窖是否是通路
int w[MAXN];//每个地窖的地雷数
int f[MAXN];//f[i]表示从第i个地窖开始挖的最多地雷数
int suf[MAXN];
int main()
{
memset(a,0,sizeof(a));
memset(w,0,sizeof(w));
memset(f,0,sizeof(f));
long n,i,j,x,y,l,k,maxn;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>w[i];
}
while(cin>>x>>y)
{
if(x==0&&y==0) break;
a[x][y]=true;
}
f[n]=w[n];//初始状态
for(i=n-1;i>=1;i--)
{
l=0,k=0;
for(j=i+1;j<=n;j++)
{
if((a[i][j])&&f[j]>l)
{
l=f[j];
k=j;
}
}
f[i]=w[i]+l;
suf[i]=k;
}
k=1;
for(i=1;i<=n;i++)//从n个数中找最大值
{
if(f[i]>f[k]) k=i;
}
maxn=f[k];
cout<<k;//先输出起始点
k=suf[k];
while(k!=0)//向后的链表
{
cout<<"-"<<k;
k=suf[k];
}
cout<<endl;
cout<<maxn<<endl;
return 0;
}
- 动态规划---挖地雷
- 挖地雷问题 单向 动态规划
- 挖地雷(动态规划 输出路径)
- 动态规划--护卫队
- 动态规划 - 硬币问题
- 算法学习-动态规划
- 动态规划-股票买卖总结
- 算法学习-动态规划
- ACM-Giroro的地雷测试(AC,广度优先搜索)
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- 挖地雷
- es6环境搭建(2)创建js编译任务。
- 【VINS算法分析之一】VINS-Mono(草稿)
- 今天又跟超级社区hsr003学了一招,如何备份虚拟币钱包及如何导入钱包
- Python.Numpy学习零碎笔记之随机数生成
- Linux环境下Swap配置方法
- 动态规划---挖地雷
- CSS限定图片宽高在范围内等比缩放(img缺省宽高属性)
- 【转载】数据结构和算法学习之路
- Javascript模块化编程(一):模块的写法
- Python金融大数据分析
- 关于LPC1768的存储地址、运行地址、向量地址
- 晶相传感器 JX-F22
- python 日常笔记2
- mysql出现“Incorrect key file for table”解决办法