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 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...
随机推荐
- NodeMan介绍
近年来,随着nodejs的突飞猛进,node项目数量增长迅猛,node项目完美的阐释了“开箱即用”的理念.小到创业公司,大到阿里这样的巨头,背后均有node的身影. node项目基于Chrome的V8 ...
- 我的第三篇博客(激动激动真激动!!!)A-B Problem
#210. 差(A-B problem) 题目描述 楠楠在网上刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目是这 ...
- VMware密匙
5A02H-AU243-TZJ49-GTC7K-3C61N 新版本密室:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA
- arcgis 画图工具
arcgis 4.x系列JavaScript API在4.4及以前的版本对画图工具(Draw)是不支持的,自4.5版本后才提供Draw的类.相关连接:https://developers.arcgis ...
- 监听auduo标签播放
<audio id="audio" controls="controls" loop="loop" style="displ ...
- oracle之数据恢复(delete误删)
ALTER TABLE TA_申请材料表 ENABLE row movement ; flashback table TA_申请材料表 to timestamp to_timestamp('2019- ...
- 安装rlwrap-0.37.tar.gz
1.解压下载好的rlwrap文件 [root@wangliping tool]# tar -zxvf rlwrap-0.37.tar.gz 2.进入解压好的文件[root@wangliping too ...
- 【论文速读】Shitala Prasad_ECCV2018】Using Object Information for Spotting Text
Shitala Prasad_ECCV2018]Using Object Information for Spotting Text 作者和代码 关键词 文字检测.水平文本.FasterRCNN.xy ...
- 【转】基于Jenkins实现持续集成【持续更新中】
知识预览 持续集成 Jenkins安装 Jenkins插件 Jenkins配置 Jenkins备份与恢复 发布PHP项目 SVN 发布Maven项目 按版本发布 远程管理 War文件部署设置 任务 J ...
- c++算法实现(一) - 递归和初始化
递归 写递归函数经常出错,提醒自己两个规则: 1. 一般来说递归函数中不应该出现for.while之类的循环语句, 因为递归就是循环的另外一种实现: 2. 注意基线条件,具体参考<算法图解> ...