博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5115 Dire Wolf(区间dp)
阅读量:4881 次
发布时间:2019-06-11

本文共 1734 字,大约阅读时间需要 5 分钟。

题意:给定n个狼的战斗力,并且每个狼的战斗力还需要加上相邻的两个狼的额外的攻击力。当把这个狼杀死之后,它的额外的战斗力就不会给其它相邻的狼加了。每杀死一个狼,它就受到和狼攻击一样大的伤害。求杀死所有的狼最小受的伤害。

思路:区间dp,dp[i][j]表示从i到j最小的伤害,考虑[i, j]当中的第k个,假设k最后杀死,那么它受的伤害就是a[k] + b[i - 1] + b[j + 1],这里的a为狼的攻击力。b为额外攻击力。

不过在端点的时候要特殊判断。

/*************************************************************************    > File Name:            4.cpp    > Author:               Howe_Young    > Mail:                 1013410795@qq.com    > Created Time:         2015年09月22日 星期二 19时33分08秒 ************************************************************************/#include 
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn = 221;const int inf = 0x3f3f3f3f;int a[maxn], b[maxn];int dp[maxn][maxn];int T, n;void init(){ for (int i = 1; i <= n; i++) dp[i][i] = a[i] + b[i - 1] + b[i + 1]; for (int len = 1; len <= n; len++)//枚举区间的长度 { for (int i = 1; i + len <= n; i++)//枚举起点 { int j = i + len;//起点加上区间长度就是终点 dp[i][j] = inf;//初始化 for (int k = i; k <= j; k++)//[i, j]区间最后取k的时候 { if (k == i)//当[i,j]这个区间中i最后取的时候 { dp[i][j] = min(dp[i][j], dp[k + 1][j] + a[k] + b[i - 1] + b[j + 1]); } else if (k == j) { dp[i][j] = min(dp[i][j], dp[i][k - 1] + a[k] + b[i - 1] + b[j + 1]); } else dp[i][j] = min(dp[i][j], dp[i][k - 1] + dp[k + 1][j] + a[k] + b[i - 1] + b[j + 1]); } } }}int main(){ int kase = 0; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); for (int i = 1; i <= n; i++) scanf("%d", &b[i]); b[0] = 0; b[n + 1] = 0; init(); printf("Case #%d: %d\n", ++kase, dp[1][n]); } return 0;}

 

转载于:https://www.cnblogs.com/Howe-Young/p/4830657.html

你可能感兴趣的文章
情态动词
查看>>
关于linux的一些基础知识
查看>>
架构漫谈阅读感悟一
查看>>
记一个数据库游标的实例
查看>>
netcore2.0 ORM框架中如何配置自定义的主外键加载
查看>>
基础练习 十进制转十六进制
查看>>
156 合并区间
查看>>
C# Base64加密解密
查看>>
HDU 1255 覆盖的面积 线段树+扫描线
查看>>
关联映射 ---- Hibernate之多对多关系
查看>>
System.ArgumentException: 另一个SqlParameterCollection中已包含SqlParameter。
查看>>
【1】自定义WindowsForm分页控件使用【共两篇】
查看>>
堆的插入删除
查看>>
期末大作业
查看>>
[转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
查看>>
123D
查看>>
你知道各调的特点吗?
查看>>
luogu P1908 逆序对
查看>>
linux用户和组管理,/etc/passwd 、/etc/shadow和/etc/group 文件内容解释
查看>>
点分治详解
查看>>