HDU - 5115 Dire Wolf(区间DP)
来源:互联网 发布:sqlserver设置默认值 编辑:程序博客网 时间:2024/05/22 13:27
题目大意:有N只怪,每只怪都有相应的A值和B值
现在要求你消灭这N只怪,消灭第i只怪的代价是A[i] + 相邻的B的和
问最小消灭代价
解题思路:在左右两边添加两只A和B都是0的怪
无论消灭顺序如何,A的和是不变的,所以不用考虑A,最后再加就可以了
接着就是区间DP了,用dp[i][j]表示把(i,j)的所有怪都消灭后,独留下第i只怪和第j只怪的最小代价,这就是为什么要在左右添加怪的原因了
接着转移,dp[i][j] = min(dp[i][k] + dp[k][j] + B[i] + B[j])
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 210;int A[N], B[N];int dp[N][N];int sum, n, cas = 1;void init() { scanf("%d", &n); sum = 0; B[0] = 0; for (int i = 1; i <= n; i++) { scanf("%d", &A[i]); sum += A[i]; } for (int i = 1; i <= n; i++) scanf("%d", &B[i]); n++; B[n] = 0;}void solve() { memset(dp, 0x3f, sizeof(dp)); for (int i = 0; i <= n; i++) dp[i][i] = dp[i][i + 1] = 0; for (int len = 2; len <= n; len++) { for (int i = 0; i + len <= n; i++) { int j = i + len; for (int k = i; k <= j; k++) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + B[i] + B[j]); } } printf("Case #%d: %d\n", cas++, dp[0][n] + sum);}int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } 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)
- Spring 的IOC和AOP
- 开发中具体的加密思路
- Xargs用法详解
- ural 1009 记忆化搜索
- MVC+jQuery.Ajax异步+增删改查和分页
- HDU - 5115 Dire Wolf(区间DP)
- Centos7中未知显示器设置屏幕分辨率
- logback日志配置
- android---(Loader异步加载)
- iOS开发之各种动画各种页面切面效果
- 接口实现
- 目标检测的图像特征提取之(二)LBP特征
- JDBC-结果集的特性(是否可滚动、是否敏感、是否可更新)
- GitHub上有很多不错的iOS开源项目