题目链接:

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 all, Dire Wolves appear to originate from Draenor.
> Dire wolves look like normal wolves, but these creatures are of nearly twice the size. These powerful beasts, 8 - 9 feet long and weighing 600 - 800 pounds, are the most well-known orc mounts. As tall as a man, these great wolves have long tusked jaws that look like they could snap an iron bar. They have burning red eyes. Dire wolves are mottled gray or black in color. Dire wolves thrive in the northern regions of Kalimdor and in Mulgore.
> Dire wolves are efficient pack hunters that kill anything they catch. They prefer to attack in packs, surrounding and flanking a foe when they can.
> — Wowpedia, Your wiki guide to the World of Warcra
>
> Matt, an adventurer from the Eastern Kingdoms, meets a pack of dire wolves. There are N wolves standing in a row (numbered with 1 to N from left to right). Matt has to defeat all of them to survive.
>
> Once Matt defeats a dire wolf, he will take some damage which is equal to the wolf’s current attack. As gregarious beasts, each dire wolf i can increase its adjacent wolves’ attack by bi. Thus, each dire wolf i’s current attack consists of two parts, its basic attack ai and the extra attack provided by the current adjacent wolves. The increase of attack is temporary. Once a wolf is defeated, its adjacent wolves will no longer get extra attack from it. However, these two wolves (if exist) will become adjacent to each other now.
>
> For example, suppose there are 3 dire wolves standing in a row, whose basic attacks ai are (3, 5, 7), respectively. The extra attacks bi they can provide are (8, 2, 0). Thus, the current attacks of them are (5, 13, 9). If Matt defeats the second wolf first, he will get 13 points of damage and the alive wolves’ current attacks become (3, 15).
>
> As an alert and resourceful adventurer, Matt can decide the order of the dire wolves he defeats. Therefore, he wants to know the least damage he has to take to defeat all the wolves.
>
#### 输入
> The first line contains only one integer T , which indicates the number of test cases. For each test case, the first line contains only one integer N (2 ≤ N ≤ 200).
>
> The second line contains N integers ai (0 ≤ ai ≤ 100000), denoting the basic attack of each dire wolf.
>
> The third line contains N integers bi (0 ≤ bi ≤ 50000), denoting the extra attack each dire wolf can provide.

输出

For each test case, output a single line “Case #x: y”, where x is the case number (starting from 1), y is the least damage Matt needs to take.

样例输入

2

3

3 5 7

8 2 0

10

1 3 5 7 9 2 4 6 8 10

9 4 1 2 1 2 1 4 5 1

样例输出

Case #1: 17

Case #2: 74

题意

n只狼站成一排,每只狼有两个属性:攻击力ai,辅助攻击力bi,一只狼的攻击力为ai+b[i-1]+b[i+1]。你打一只狼会受到ai+b[i-1]+b[i+1]伤害,并且这之狼会死掉,之后相邻的会靠在一起,问你受到最少的伤害打死所有的狼

题解

区间dp

一开始考虑的是[l,r]内,第一只要打死哪只狼,发现死了之后剩下的又会靠在一起。。。

考虑最后一只打死的是哪只狼,就不会有这个问题了,比如你考虑[l,r]内打死的最后一只是i,那么你就发现[l,i],[i,r]完全独立开了,就可以做了。(注意[l,r]中,l和r不能打死)

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define prf printf typedef int LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=10000000000000000LL;
const double eps=1e-9; const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn=222; int dp[maxn][maxn];
int arr[maxn],brr[maxn];
int n; int dfs(int l,int r){
if(r-l<=1) return 0;
if(dp[l][r]>=0) return dp[l][r]; int& res=dp[l][r]=INF;
for(int i=l+1;i<r;i++){
res=min(res,dfs(l,i)+dfs(i,r)+brr[l]+brr[r]);
} return res;
} int main() {
int tc,kase=0;
scf("%d",&tc);
while(tc--) {
scf("%d",&n);
clr(dp,-1);
for(int i=1;i<=n;i++) scf("%d",&arr[i]);
for(int i=1;i<=n;i++) scf("%d",&brr[i]);
brr[0]=0,brr[n+1]=0;
int ans=dfs(0,n+1);
for(int i=1;i<=n;i++) ans+=arr[i];
prf("Case #%d: %d\n",++kase,ans);
}
return 0;
} //end-----------------------------------------------------------------------

HDU 5115 Dire Wolf 区间dp的更多相关文章

  1. HDU 5115 Dire Wolf (区间DP)

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

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

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

  3. 动态规划(区间DP):HDU 5115 Dire Wolf

    Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not ...

  4. hdu 5115 Dire Wolf(区间dp)

    Problem Description Dire wolves, also known as Dark wolves, are extraordinarily large and powerful w ...

  5. HDU 5115 Dire Wolf ——(区间DP)

    比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: #inc ...

  6. hdu 5115 Dire Wolf

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目分类:区间dp 题意:有n只狼,每只狼有两种属性,一种攻击力一种附加值,我们没杀一只狼,那么 ...

  7. Dire Wolf(区间DP)

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

  8. HDU - 5115 Dire Wolf (非原创)

    Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not ...

  9. HDU5115 Dire Wolf(区间DP)

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

随机推荐

  1. node.js环境搭建

    (1)Node.js安装 Node.js安装包及源码下载地址为: https://nodejs.org/download/   , 双击下载后的安装包.msi,检查Node.js版本命令:node - ...

  2. 译文 对无障碍网页应用(ARIA)的选择

    //本文编辑格式为Markdown,译文同时发布在众成翻译 对无障碍网页应用(ARIA)的选择 让网站对每个人都能访问是一件相当艰难的工作,尤其是在我们使用自定义标记解决方案(custom marku ...

  3. A Personal Selection of Books on E lectromagnetics and Computational E lectromagnetics---David B. Davidson

    链接. General Books on Electromagnetics When our department recently reviewed our junior-level text, w ...

  4. [cocos2dx]让CCScrollView支持分页

    [cocos2dx]让CCScrollView支持分页 做过IOS开发的朋友, 肯定知道UIScrollView有一个isPaged属性. 当设置其为true的时候, 滑动会自动分页. 即, 每次滑动 ...

  5. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  6. 委托--delegate

    委托,跟类很相似,能够定义对象,但是区别是 1,委托必须有关键字delegate. 2,委托有类型修饰符,比如void,string,int.修饰符取决于他的方法返回类型. 3,委托没有方法实现. d ...

  7. WebApi 返回小驼峰式 json 格式,并格式化日期

    from:http://blog.csdn.net/magiccops/article/details/42969363 屏蔽默认返回xml格式:Global文件加:GlobalConfigurati ...

  8. <global-results>

    全局result(global-results)有很多时候一个<result>可供很多<action>使用,这时可以使用<global-results>标签来定义全 ...

  9. f2fs解析(七)node管理器中的 free_nid 结构体

    除了node_info之外, node管理器中还有还有个重要的数据结构: struct free_nid { struct list_head list; /* for free node id li ...

  10. 泛型类型的协变(covariant)和逆变

    官网:http://msdn.microsoft.com/zh-cn/library/dd799517.aspx 原文链接:http://book.51cto.com/art/201112/30857 ...