hdu 5115 Dire Wolf【区间dp】
来源:互联网 发布:淘宝离线自动发货 编辑:程序博客网 时间:2024/06/05 09:50
题目大意:
n只狼排成直线,第i只狼基础攻击力为ai,辅助攻击力bi,杀死第i只狼会损耗a(i)+b(i-1)+b(i+1)点体力,问最少多少体力可以把狼全部杀死。
思路:
dp[i][j]表示杀死第i到第j只狼最少消耗,枚举k表示最后杀死的狼,
则有:dp[i][j] = min(dp[i][j], dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1])。
处理下边界即可。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 210;int a[MAXN], b[MAXN], dp[MAXN][MAXN];int main(int argc, char const *argv[]){ int t; scanf("%d", &t); for(int l = 1; l <= t; l++) { int n; 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] = b[n+1] = 0; for(int i = 1; i <= n; i++) dp[i][i] = a[i] + b[i-1] + b[i+1]; for(int t = 2; t <= n; t++) for(int i = 1; i <= n+1-t; i++) { int j = i + t - 1; dp[i][j] = min(dp[i+1][j] + a[i] + b[i-1] + b[j+1], dp[i][j-1] + a[j] + b[i-1] + b[j+1]); for(int k = i+1; k < j; k++) dp[i][j] = min(dp[i][j], dp[i][k-1] + dp[k+1][j] + a[k] + b[i-1] + b[j+1]); } printf("Case #%d: %d\n", l, dp[1][n]); } return 0;}
0 0
- 【DP】 HDU 5115 Dire Wolf 区间DP
- hdu 5115 Dire Wolf 区间DP
- hdu 5115 Dire Wolf (区间DP)
- HDU 5115 Dire Wolf (区间DP)
- hdu 5115 Dire Wolf(区间DP)
- HDU 5115Dire Wolf(区间dp)
- hdu 5115 Dire Wolf【区间DP】
- HDU 5115 Dire Wolf(区间DP)
- HDU 5115 Dire Wolf (区间dp)
- HDU 5115 Dire Wolf(区间DP)
- HDU 5115 Dire Wolf(区间DP)
- HDU - 5115 Dire Wolf(区间DP)
- HDU 5115 Dire Wolf(区间DP)
- hdu 5115 Dire Wolf(区间dp)
- HDU 5115:Dire Wolf 区间dp
- HDU 5115 Dire Wolf(区间DP)
- hdu 5115 Dire Wolf【区间dp】
- HDU 5115 Dire Wolf(区间DP)
- c3p0数据库连接池配置
- Android源码下载和编译出现的问題
- ios申请真机调试( xcode 5)详细解析
- linux 下手动安装 gcc
- beanshell 线上修复BUG
- hdu 5115 Dire Wolf【区间dp】
- 基于Flume的美团日志收集系统(一)架构和设计
- nginx反向代理服务器调优
- 求二叉树的叶节点
- 网络流二十四题之三 —— 最小路径覆盖问题(PATH)
- 基于Flume的美团日志收集系统(二)改进和优化
- 序列化二叉树
- 第四次_Activity传递参数
- Eclispse Ctl+shift+f 将默认行数80变为120