HDU5115 Dire Wolf(区间DP)】的更多相关文章

渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了. 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1两个虚拟的狼,状态转移方程如下: dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + b[i] + b[j]) #include<cstdio> #include<iostream> #include<cstdlib> #inclu…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others)Memory Limit: 512000/512000 K (Java/Others) 问题描述 Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not…
Dire Wolf Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)Total Submission(s): 2221    Accepted Submission(s): 1284 Problem Description Dire wolves, also known as Dark wolves, are extraordinarily large and powerfu…
考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个.令dp(i,j)表示拿完[i,j]所有物品的最小代价.你可能会说,我们拿[i,j]这一段物品的时候,i左边和j右边的第一个物品可能会不断变化,影响i和j的最终价格.其实是不会的,还是想想一开始说的整个序列枚举最后被拿走的,然后不断分割成子问题的过程,我们都是先拿走[i,j]中的所有元素,之后才会去动i-1或者j+1.所以可以澄清一下dp状态含义:dp(i,j)表示原序列中把[i,j]中的元素…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目大意:有一些狼,从左到右排列,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和.若两只狼之间的狼都被杀了,这两只狼也算相邻.求杀掉一排狼的最小代价.解题思路:设dp[i][j]为消灭编号从i到j只狼的代价,那么结果就是dp[1][n]枚举k作为最后一只被杀死的狼,此时会受到a[k]和b[i-1] b[j+1]的伤害 取最小的即可.可列出…
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4361169.html   ---by 墨染之樱花 [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5115 [题目描述]有个冒险家要消灭一群狼,这些狼站成一排,每个狼都有一个基础攻击力,除此之外,每个狼还会对两边的狼有附加攻击力.不过当一个狼被消灭时,其对两边狼的附加攻击力就会消失,但是两边的狼就会变邻近,它们的附加攻击力就会相互作用.问消灭这…
题目链接 区间DP $dp_{i,j}$为杀掉$i~j$内的狼的最小代价 枚举$i~j$中最后杀掉的狼,$dp_{i,j}=min\{ { {k\in{[i,j]}} | dp_{i,k-1}+dp_{k+1,j}+A_k+B_{i-1}+B_{j+1}} \}$ #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #define re(i,l,r) for(int…
也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好...想到了再加上去.... 之前也看了别人的总结,也给出了不少区间DP的模板.这里我也贴一下基本的模板: 区间DP模板 ; len < n; len++) { //操作区间的长度 ; i+len <= n; i++) { //始末 int j=i+len; //检查是否匹配(非必须) for (…
参考博文:区间dp小结(附经典例题) 首先,什么是区间dp?它是干什么的? 先在小区间进行DP得到最优解,然后再利用小区间的最优解合并求大区间的最优解 操作往往涉及到区间合并问题 以上. 模板如下: //mst(dp,0) 初始化DP数组 ;i<=n;i++) { dp[i][i]=初始值 } ;len<=n;len++) //区间长度 ;i<=n;i++) //枚举起点 { ; //区间终点 if(j>n) break; //越界结束 for(int k=i;k<j;k++…
题意 就是有一对狼,每个狼有初始的攻击力,并且还能给左右两边的狼提供攻击力加成,当冒险家杀死一头狼的时候他也会受到这个狼目前攻击力的伤害 实例解析 33 5 78 2 0 有三头狼,刚开始第二头狼给他左右两边的狼各加2攻击力,由于第一头狼左边没有狼,所以只给第二头狼加,第三头狼还那样,一系列操作后攻击力为(5,13,9),从左往右杀死狼 1.受到5点攻击,且第二头狼的攻击力加成消失(5,9) 2.受到5点攻击,且第三头狼攻击加成消失(7) 3最后结果5+5+7=17 题解 dp[i][j]=mi…