转载请注明出处,谢谢: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,k]和[k+1,j]。先消灭[i,k]的狼的话k+1位置的狼的攻击力就会发生变化,即减去原本k位置提供的再加上新的i-1位置提供的。若先消灭[k+1,j]的话也一样修改。只需枚举[i,j]区间再枚举分割点k即可,复杂度O(n^3)。此外为了避免讨论端点,在0和n+1位置各加一个基础攻击力和附加攻击力均为0的狼。

/* ***********************************************
Author :Kirisame_Marisa
blog :http://www.cnblogs.com/KirisameMarisa/
Created Time :2015年03月23日 星期一 21时29分52秒
File Name :a.cpp
************************************************ */ #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=;
#define eps 1e-10
#define zero(x) (fabs(x)<eps)
#define REP(X,N) for(int X=0;X<N;X++)
#define REP2(X,L,R) for(int X=L;X<=R;X++)
#define CLR(A,X) memset(A,X,sizeof(A))
#define PB(X) push_back(X)
#define MP(X,Y) make_pair(X,Y)
#define IT iterator
#define test puts("OK")
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector<PII> VII; int n;
int a[MAXN],b[MAXN];
int dp[MAXN][MAXN]; int main()
{
//freopen("in","r",stdin);
//freopen("out","w",stdout);
int T;
scanf("%d",&T);
REP(p,T)
{
scanf("%d",&n);
REP2(i,,n)
scanf("%d",&a[i]);
REP2(i,,n)
scanf("%d",&b[i]);
a[]=a[n+]=b[]=b[n+]=;
REP2(i,,n)
dp[i][i]=a[i]+b[i-]+b[i+];
REP2(len,,n)
{
REP2(i,,n-len+)
{
int s=i,t=i+len-;
dp[s][t]=INF;
REP2(j,s,t-)
{
int temp=min(-b[j]+b[s-],-b[j+]+b[t+]);
if(temp+dp[s][j]+dp[j+][t]<dp[s][t])
dp[s][t]=temp+dp[s][j]+dp[j+][t];
}
}
}
printf("Case #%d: %d\n",p+,dp[][n]);
}
return ;
}

hdu5115 Dire Wolf【区间dp】的更多相关文章

  1. HDU5115 Dire Wolf(区间DP)

    渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了. 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1 ...

  2. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  3. Dire Wolf(区间DP)

    Dire Wolf Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)Total ...

  4. [题解] HDU 5115 Dire Wolf 区间DP

    考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个.令dp(i,j)表示拿完[i,j]所有物品的最小代价.你可能会说,我们拿[i,j]这一段物品的 ...

  5. HDU 5115 Dire Wolf (区间DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目大意:有一些狼,从左到右排列,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这 ...

  6. hdu5115 Dire Wolf

    题目链接 区间DP $dp_{i,j}$为杀掉$i~j$内的狼的最小代价 枚举$i~j$中最后杀掉的狼,$dp_{i,j}=min\{ { {k\in{[i,j]}} | dp_{i,k-1}+dp_ ...

  7. 区间DP小结

    也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好 ...

  8. 区间dp(模板+例题)

    参考博文:区间dp小结(附经典例题) 首先,什么是区间dp?它是干什么的? 先在小区间进行DP得到最优解,然后再利用小区间的最优解合并求大区间的最优解 操作往往涉及到区间合并问题 以上. 模板如下: ...

  9. Dire Wolf——HDU5115(区间DP)

    题意 就是有一对狼,每个狼有初始的攻击力,并且还能给左右两边的狼提供攻击力加成,当冒险家杀死一头狼的时候他也会受到这个狼目前攻击力的伤害 实例解析 33 5 78 2 0 有三头狼,刚开始第二头狼给他 ...

随机推荐

  1. (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  2. Java基础之静态变量

    public class StaticVariable { public static void main(String[] args) { Person p1 = new Person(); Per ...

  3. APM代码学习笔记2:编译过程

    make编译 所有位置的Makefile 引用的都是/mk/apm.mk target.mk 设置CONFIG_HAL_BOARD 例如linux就是HAL_BOARD_LINUX environ.m ...

  4. Web开发者需具备的8个好习惯

    优秀的Web开发人员工作效率更高,因为他们拥有丰富的经验和良好的习惯.作者Gregor Dorfbauer分享了用于Web开发中的8个好习惯,这些良好的工作习惯不仅能提高效率,还能让您创建更加优秀的应 ...

  5. Angular ng-repeat 对象和数组遍历

    直接上代码 <!DOCTYPE html> <html> <head> <meta name="description" content= ...

  6. linux系统性能监控常用命令

      一.Linux服务器性能关注点 1)CPU -> load:表示cpu在一段时间内正在处理以及等待处理的任务之和统计信息,简单可理解为cpu正处理的线程数和能同时处理的线程数的比值.一般认为 ...

  7. HTTP使用BASIC认证的原理及实现方法(还有NTLM方法,比较复杂)

    一.   BASIC认证概述 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客 ...

  8. android ListView的上部下拉刷新下部点击加载更多具体实现及拓展

    android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多

  9. javascript的this指向

    JavaScript 是一种脚本语言,支持函数式编程.闭包.基于原型的继承等高级功能.JavaScript一开始看起来感觉会很容易入门,但是随着使用的深入,你会发现JavaScript其实很难掌握,有 ...

  10. cocos2d-x过程动作CCProgressTo示例学习笔记

    // // SpriteProgressToRadial // //------------------------------------------------------------------ ...