
区间dp学习5——hdu 5115——Dire Wolf——做题反思
前面的分析过程我学到了很多,还有一个学习到的点是边界区间枚举,这是区间dp第二种表达方式经常需要处理的点
对应的网上代码(主要实现部分)
发布日期:2021-05-07 03:07:43
浏览次数:20
分类:精选文章
本文共 2187 字,大约阅读时间需要 7 分钟。
这个题令我对区间dp有了新的理解,很满足能够在做题慢的情况下能够对题目所涉及的知识最大程度掌握



memset(dp,INF,sizeof(dp)); for(int i=1;i<=n;i++) dp[i][i]=a[i]+b[i-1]+b[i+1];///区间长度为1的时候的情况 for(int len=2;len<=n;len++)///枚举所有可能的区间长度 { for(int i=1;i<=n-len+1;i++)///枚举所有可能的起点 { int j=i+len-1;///j代表区间的右端点///即区间[i,j] 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
但我后来反思了,其实这里可以简化(先看图片解释的思路,再看代码):

memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) dp[i][i] = a[i] + b[i - 1] + b[i + 1];//2.初始化用到了区间化思想(区间dp) for (int len = 1; len < n; len++) { for (int i = 1; i + len <= n; i++) { int j = i + len; //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]);//3.边界条件的处理 dp[i][j] = inf; for (int k = i; k <= j; k++) { dp[i][j] = min(dp[i][k - 1] + dp[k + 1][j] + a[k] + b[i - 1] + b[j + 1], dp[i][j]); } } }
全代码:
#include#include #include #include using namespace std;const int N = 300;const int inf = 0x3f3f3f3f;int n;int a[N];int b[N];int solve();int dp[N][N];int main(){ int t = 1; int T; cin >> T; while (T--) { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> b[i]; cout << "Case #" << t++ << ": " << solve() << endl; }}int solve(){ a[0] = b[0] = a[n + 1] = b[n + 1] = 0;//1.边界条件的初始化 memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) dp[i][i] = a[i] + b[i - 1] + b[i + 1];//2.初始化用到了区间化思想(区间dp) for (int len = 1; len < n; len++) { for (int i = 1; i + len <= n; i++) { int j = i + len; //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]);//3.边界条件的处理 dp[i][j] = inf; for (int k = i; k <= j; k++) { dp[i][j] = min(dp[i][k - 1] + dp[k + 1][j] + a[k] + b[i - 1] + b[j + 1], dp[i][j]); } } } return dp[1][n];}
这个题目使我对区间dp第二种表达方式有了一定的理解,在这里归纳一下
1.区间联立性:要考虑区间之间的联系,不能独立化考虑 2.边界条件处理的两种方式以及优先级,以融入区间转移方程为主 3.区间边界状态处理:利用无效区间以及k的分割点枚举发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月15日 12时15分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hmz 的女装(递推)
2021-05-09
HDU5589:Tree(莫队+01字典树)
2021-05-09
不停机替换线上代码? 你没听错,Arthas它能做到
2021-05-09
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2021-05-09
分库分表的 9种分布式主键ID 生成方案,挺全乎的
2021-05-09
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
2021-05-09
Python开发之序列化与反序列化:pickle、json模块使用详解
2021-05-09
回顾-生成 vs 判别模型-和图
2021-05-09
采坑 - 字符串的 "" 与 pd.isnull()
2021-05-09
无序列表 - 链表
2021-05-09
SQL 查询强化 - 数据准备
2021-05-09
SQL 强化练习 (四)
2021-05-09
SQL 强化练习 (八)
2021-05-09
Excel 拼接为 SQL 并打包 exe
2021-05-09
Pandas数据分析从放弃到入门
2021-05-09
Matplotlib绘制漫威英雄战力图,带你飞起来!
2021-05-09
机器学习是什么
2021-05-09
《小王子》里一些后知后觉的道理
2021-05-09
《自私的基因》总结
2021-05-09