标签搜索

动态规划

爱做梦的月亮
2022-08-23 / 10 评论 / 1,159 阅读 / 615 个汉字 / 正在检测是否收录...

经典数塔问题

  有一金字塔形数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

  输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

输入样例

1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出样例

30

动态规划代码

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int f[N][N], dp[N][N];
int main(){
    int C, n;
    cin >> C;
    while(C--) {
        scanf("%d", &n);
        for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= i; j ++){
                scanf("%d", &f[i][j]);
            }
        }
        for(int j = 1; j <= n; j ++)
            dp[n][j] = f[n][j];
        for(int i = n - 1; i >= 1; i --){
            for(int j = 1; j <= i; j ++){
                dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + f[i][j];
            }
        }
        printf("%d\n", dp[1][1]);
    }
 
    return 0;
}

分治与动态规划

  分治与动态规划都是将问题分解成子问题,然后合并子问题的解得出原问题的解。不同的是,分治分解的子问题是不重叠的(如快速排序将问题分为处理左序列与右序列),而动态规划问题相反。同时,动态规划一定解决的是最优化问题,而分治不一定。

贪心与动态规划

  它们都是将问题变成处理子问题,都要求原问题拥有最优子结构。二者的区别在于,贪心类似于“自顶向下”,但是是通过一种最优策略直接选择一个子问题求解,其它子问题则直接舍弃。这就是说,它总是在上一步选择的基础上继续选择,整个过程是单链的。显然,这种“最优选择策略”的正确性需要进一步归纳证明。比如数塔问题,贪心法会从第一层开始,选择下面两数更大的那个一直走下去,显然这并不一定能得到最优解。而动态规划不管是自顶向下还是自底向上,本质上都是从边界开始得到目标问题的最优解。也就是说,它会考虑完所有子问题,并选择继承能得到最优结果的那个,对于暂时没被继承的子问题也不会直接舍弃——由于重叠子问题的存在,后期可能会再次考虑它们,因此它们仍然有机会成为全局最优的一部分。

  贪心是一种壮士断腕的决策——只要进行的选择就一直走下去不后悔;动态规划则是动态地考虑问题,看谁能笑到最后——局部的领先不代表全局的领先。

0

评论 (10)

取消
  1. 头像
    wriwgtugkr
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com

     回复
  2. 头像
    bopxbjkbgb
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

     回复
  3. 头像

    华纳总公司开户流程详解?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

     回复
  4. 头像

    华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

     回复
  5. 头像

    华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

     回复
  6. 头像

    华纳东方明珠客服电话是多少?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
    华纳东方明珠开户专线联系方式?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】

     回复
  7. 头像

    华纳客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】

     回复
  8. 头像

    果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

     回复
  9. 头像

    果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

     回复
  10. 头像

    东方明珠客服开户联系方式【182-8836-2750—】?μ- cxs20250806
    东方明珠客服电话联系方式【182-8836-2750—】?- cxs20250806】
    东方明珠开户流程【182-8836-2750—】?薇- cxs20250806】
    东方明珠客服怎么联系【182-8836-2750—】?薇- cxs20250806】

     回复