hdu5115(区间dp)
来源:互联网 发布:js中什么是构造函数 编辑:程序博客网 时间:2024/05/16 05:21
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115
题意:有n只狼站在一排,每只狼都有自己的基础伤害的额外伤害。如果你杀死一只狼,那么你将承受这只狼的基础伤害加上相邻两只狼的额外伤害。现在让你求出将这些狼全部杀死所承受的最小伤害。
思路:看见n不大那么直接想到区间dp(好吧,其实最先想到的是贪心),dp[i][j]表示杀死[i,j]区间狼承受的最小伤害,由于杀死最后一只狼只会受到他自己的基础伤害,所以想到了枚举杀死最后一只狼k,这样,状态转移方程就出来了:dp[i][j]=min(dp[i][j],dp[i][k-1]+a[k]+dp[k+1][j]+b[i-1]+b[j+1]);答案自然就是dp[1][n]了
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=205;
const int INF=0x4fffffff;
int dp[maxn][maxn],a[maxn],b[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int l=1;l<=n;l++)
{
for(int i=1;i<=n-l+1;i++)
{
int j=i+l-1;
dp[i][j]=INF;
for(int k=i;k<=j;k++)
{
dp[i][j]=min(dp[i][j],dp[i][k-1]+a[k]+dp[k+1][j]+b[i-1]+b[j+1]);
}
}
}
static int t=1;
printf("Case #%d: %d\n",t++,dp[1][n]);
}
return 0;
}
- hdu5115(区间dp)
- hdu5115(区间dp)
- HDU5115(区间dp)详解
- HDU5115 Dire Wolf(区间DP)
- hdu5115 区间dp
- HDU5115(区间DP)
- hdu5115(区间dp)
- HDU5115 Dire Wolf (区间DP)
- hdu5115 Dire Wolf(区间dp)
- hdu5115 Dire Wolf--区间DP
- 区间DP-hdu5115-Dire Wolf
- HDU5115 Dire Wolf 区间dp
- hdu5115 Dire Wolf 区间dp
- hdu5115 Dire Wolf(区间dp)
- HDU5115 Dire Wolf 区间DP 记忆化搜索
- hdu5115
- hdu4597(区间dp)
- poj1651 (区间dp)
- 如何安装Lavarel How to install Lavarel?
- C6748定时器64位模式
- ReactJS初学
- 1115. Counting Nodes in a BST (30)
- 0001 Maximum Subsequence Sum
- hdu5115(区间dp)
- Java:多态 之 向下转型+Instanceof关键字
- mysql Innodb和mvcc
- 浮点数误差陷阱
- concurrent-5-AQS-Condition
- Hibernate 入门
- Java Collection
- TensorFlow小试牛刀(1):CNN图像分类
- java编程实现中缀表达式转变成后缀表达式并求和