leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划
如果这个:
leadcode的Hot100系列--62. 不同路径--简单的动态规划
看懂的话,那这题基本上是一样的,
不同点在于:
1、这里每条路径相当于多了一个权值
2、结论不再固定,而是要比较不同走法哪个权值更小
针对第一点,需要把第一行和第一列的权值做一个累加:
假设这里的权值都是1,则
A | B | C | D |
---|---|---|---|
E | F | G | H |
I | J | K | L |
中,f(A) 为1,f(B) 就为2,,因为A和B各有一个权值,f(C)为3,f(E) 为2,f(I)为3:
1 | 2 | 3 | 4 |
---|---|---|---|
2 | f(F) | f(G) | f(H) |
3 | f(J) | f(K) | f( L) |
要想 f(F) 小,则要比较f(B)和f(E)哪个小,所以 f(F) = min( f(F), f(E) ) + 1。
所以很容易得到动态方程:
f [i] [j] = min( f [i] [j-1] + f [i-1] [j] ) + 1 // i 代表行,j 代表列,最后加的1,是假设当前的点的权值是1
所以,每个点记录的从开始到当前点的最小值。
int min(int a, int b)
{
return a<b?a:b;
}
int minPathSum(int** grid, int gridSize, int* gridColSize){
int p[gridSize][*gridColSize];
int sum = 0, i,j;
for (i=0; i<gridSize; i++) // 先算出第一列的权值
{
sum += grid[i][0];
p[i][0] = sum;
}
sum = 0;
for (i=0; i<*gridColSize; i++) // 先算出第一行的权值
{
sum += grid[0][i];
p[0][i] = sum;
}
for (i=1; i<gridSize; i++)
{
for (j=1; j<*gridColSize; j++)
{
p[i][j] = min(p[i][j-1], p[i-1][j]) + grid[i][j]; // 动态方程
}
}
return p[gridSize-1][*gridColSize-1];
}
leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划的更多相关文章
- leadcode的Hot100系列--62. 不同路径--简单的动态规划
题目比较清晰,简单来说就是: A B C D E F G H I J K L 只能往右或者往下,从A到L,能有几种走法. 这里使用动态规划的方法来做一下. 动态规划最重要的就是动态方程,这里简单说下这 ...
- leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种想法的应用
提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来. 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在 ...
- UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)
Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...
- 洛谷 P4149 [IOI2011]Race-树分治(点分治,不容斥版)+读入挂-树上求一条路径,权值和等于 K,且边的数量最小
P4149 [IOI2011]Race 题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KK,且边的数量最小. 输入格式 第一行包含两个整数 n, Kn,K. 接下来 n - 1n−1 行 ...
- hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
/* 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了... 1,如果这个无向图开始就是一个非连通图,直接输出0 2,重边(两个节点存在多条边, 权值不一样) 3,如果找到 ...
- LUOGU P2764 最小路径覆盖问题 (最小路径点覆盖)
解题思路 有向图最小路径点覆盖问题,有这样的结论就是有向图最小路径点覆盖等于n-拆点二分图中最大匹配.具体怎么证明不太知道..输出方案时找到所有左部未匹配的点一直走$match$就行了. #incl ...
- HDU 1533 KM算法(权值最小的最佳匹配)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- leadcode的Hot100系列--155. 最小栈
栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来. push,对应入电梯,把数据往里面压 po ...
- leadcode的Hot100系列--78. 子集--回溯
上一篇说了使用位运算来进行子集输出,这里使用回溯的方法来进行排序. 回溯的思想,我的理解就是: 把解的所有情况转换为树或者图,然后用深度优先的原则来对所有的情况进行遍历解析. 当然,因为问题中会包涵这 ...
随机推荐
- 好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字
原文:好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csd ...
- OnNavigatedTo 和 Loaded 的比较
直接上结果: OnNavigateTo :是在导航完成,在控件或者页面加载前(之间)调用. Loaded :是在页面准备好并且在控件加载完成后调用. 参考资料: 1.https://stackover ...
- WPF MessageBox 添加确认取消按钮 并判断
很简单的功能随笔 if (System.Windows.MessageBox.Show("您确定要删除吗?", "提示:", MessageBoxButton. ...
- 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)
今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些 ...
- WPF将点列连接成光滑曲线——贝塞尔曲线
原文:WPF将点列连接成光滑曲线--贝塞尔曲线 背景 最近在写一个游戏场景编辑器,虽然很水,但是还是遇到了不少问题.连接离散个点列成为光滑曲线就是一个问题.主要是为了通过关键点产生2D的赛道场景.总之 ...
- C#获取带汉字的字符串长度
正常情况下,我们是直接去string的length的,但是汉字是有两个字节的,所以直接用length是错的.如下图: 所以应该用以下代码来获取长度: private void button1_Clic ...
- Android 命令设置获取、IP地址、网关、dns
设置ip root@android:/ # ifconfig eth0 192.168.0.173 netmask 255.255.255.0 ifconfig eth0 192.168.0.173 ...
- HTTP RFC7230
https://tools.ietf.org/html/rfc7230 https://tools.ietf.org/html/rfc7231#section-4
- 如何作为一个优秀的ERP实施顾问
原文地址:如何作为一个优秀的ERP实施顾问作者:天思软件 作一个优秀的ERP实施顾问无论是天思.金蝶,用友,还是其他业务软件.实施顾问的发展道路都差不多. 1.初级实施顾问,中级实施顾问,高级实施顾问 ...
- QT 线程池 + TCP 小试(三)实现最终功能
*免分资源链接点击打开链接http://download.csdn.net/detail/goldenhawking/4492378 有了TCP.线程池,我们就可以把他们连接起来.使用最简单的 QMa ...