HDU 5115 (杀狼,区间DP)
题意:你是一个战士现在面对,一群狼,每只狼都有一定的主动攻击力和附带攻击力。你杀死一只狼。你会受到这只狼的(主动攻击力+旁边两只狼的附带攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时, 自己受到的伤害最小。(提醒,狼杀死后就消失,身边原本相隔的两只狼会变成相邻,而且不需要考虑狼围城环这种情况)
题解:明显的区间DP,但是这题中需要自己确定一个 方案,不难想到先打2边在打中间;
子问题:在区间i,j上的代价;
划分:区间的直接合并的过程中,是区间和区间合并还是区间和点合并,即分割点是不是在边界;
总结:又是初始化,在dp问题的初始化上已经错了许多次了,写出转移方程后,一定要注意好边界情况以及 f 的第一项
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std; const int maxn=;
const int INF=0x3f3f3f3f;
int f[maxn][maxn], a[maxn], b[maxn]; int main()
{
//freopen("in.txt", "r", stdin);
int T, kase=; cin>>T;
while(T--)
{
memset(a, , sizeof(a));
memset(b, , sizeof(b));
memset(f, , sizeof(f));
//memset(f, 0x3f, sizeof(f));
//这题的状态转移方程,有个f[i][k-1]和f[k+1][j]
int n; cin>>n;
for(int i=; i<=n; i++)
cin>>a[i];
for(int i=; i<=n; i++)
cin>>b[i]; memset(f, 0x3f, sizeof(f));
for(int i=; i<=n; i++)
f[i][i]=a[i]+b[i-]+b[i+]; //f的边界,这里不写也行,把len从0开始就可以了; for(int len=; len<n; len++)
for(int i=; i<=n-len; i++)
{
int j=i+len;
for(int k=i; k<=j; k++) //k的范围要注意,是可以等于i和j的
{
if(k!=j&&k!=i)
f[i][j]=min(f[i][j], f[i][k-]+a[k]+f[k+][j]+b[i-]+b[j+]);
else if(k==j)
f[i][j]=min(f[i][j], f[i][k-]+a[k]+b[i-]+b[j+]);
else
f[i][j]=min(f[i][j], a[k]+f[k+][j]+b[i-]+b[j+]);
//以下的写法也可以AC,就是不判断k是否在端点, 不过这样写的话初始化就要好好注意一下了
//f[i][j]=min(f[i][j], f[i][k-1]+a[k]+f[k+1][j]+b[i-1]+b[j+1]);
}
}
printf("Case #%d: %d\n", ++kase, f[][n]);
}
return ;
}
HDU 5115 (杀狼,区间DP)的更多相关文章
- HDU 5115 Dire Wolf 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...
- HDU 5115 Dire Wolf (区间DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目大意:有一些狼,从左到右排列,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这 ...
- [题解] HDU 5115 Dire Wolf 区间DP
考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个.令dp(i,j)表示拿完[i,j]所有物品的最小代价.你可能会说,我们拿[i,j]这一段物品的 ...
- HDU 5693 D Game 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5693 题解: 一种朴实的想法是枚举选择可以删除的两个或三个数(其他的大于三的数都能凑成2和3的和), ...
- hdu 4597 Play Game 区间dp
Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...
- hdu 5693 && LightOj 1422 区间DP
hdu 5693 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5693 等差数列当划分细了后只用比较2个或者3个数就可以了,因为大于3的数都可以由2和3 ...
- hdu 4745 Two Rabbits 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerr ...
- hdu 5181 numbers——思路+区间DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5181 题解:https://www.cnblogs.com/Miracevin/p/10960717.ht ...
- HDU 1141---Brackets Sequence(区间DP)
题目链接 http://poj.org/problem?id=1141 Description Let us define a regular brackets sequence in the fol ...
- HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)
题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...
随机推荐
- mac电脑安装wxPython2.8.12.1不成功怎么办 , Could not find a version that satisfies the requirement 2.8.12.1
目的:robotframe-ride用于接口测试 遇到的问题: 1.mac终端pip安装robotframework-ride后 pip install robotframework-ride (pi ...
- Cocos Creator JS 获取当前日期与时间
var testDate = new Date(); testDate.getYear();//获取当前年份(2位) testDate.getFullYear(); //获取完整的年份(4位,1970 ...
- sping_依赖注入的三种方式
1. set注入:通过setxxx()给属性赋值 <!--id是对象--> <!--class是类--> <bean id = "student" ...
- zlib简单使用说明(转)
1.背景:项目需要把protobuf文件压缩后再传到MQTT,于是就想到了zlib 2.zlib是提供数据压缩用的函式库,此函式库为自由软件. 3.网上下载zlib压缩包,执行如下命令,函数库就可使用 ...
- 蓝桥杯近3年决赛题之二(16年b组)
做的时候只做对了第一题. 1. 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制 ...
- asp.net导入后台代码
public void Upload(string information){ int Bank = 0; for (int i = 0; i <Request.Files.Count; i++ ...
- hibernate一级缓存及对象的状态
hibernate中实体类对象的状态 在hibernate中实体类对象有三种状态 (1)瞬时态(临时态) 瞬时态:即我们自己创建一个对象,还没有保存到数据库就叫临时态,其实也可以说是对像没有id值,跟 ...
- Log4j 2使用教程二 【详解】
配置 Log4j 2的配置可以通过4种方式中的1种完成: 1.通过使用XML,JSON,YAML或属性格式编写的配置文件. 2.以编程方式,通过创建一个ConfigurationFactory和配置实 ...
- qemu中的内存管理
qemu负责模拟虚机的外设,因此虚机的线性地址空间主要由qemu进行管理,也就是确定线性地址空间中哪段地址属于哪个设备或者DRAM或者其他的什么. 1.数据结构 1.RAMBLOCK (最直接接触ho ...
- RESTClient 使用
Wisdom RESTClient 一款自动化测试REST API的工具,它可以自动化测试RESTful API并生成精美的测试报告,同时基于测试过的历史API,可以生成精美的RESTful API文 ...