【动态规划】使用到dp的题

简介: 【动态规划】使用到dp的题

4.1.png

可以提前看看900. 整数划分 - AcWing题库

(好像只有买过算法基础课才能看)里面有划分标准——闫氏dp分析法

会不断更新

建议参考这篇题解AcWing 4181. 数的划分——最全解法 - AcWing

🎆🎆🎆🎆🎆🎆

P1025 [NOIP2001 提高组] 数的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


4.2.png

4.2.png

image.png

 注意看f[i,j]的含义

image.png

#include <iostream>
using namespace std;
const int N = 210, M = 10;
int f[N][M];
int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, k; cin >> n >> k;
    f[0][0] = 1;
    for (int i = 1; i <= n; i ++) f[i][1] = 1;//注意看f[i,j]的含义
    for (int i = 1; i <= n; i ++)
        for (int j = 2; j <= min(i, k); j ++)//从2开始
            f[i][j] = f[i - 1][j - 1] + f[i - j][j];
    cout << f[n][k] << endl;
    return 0;
}

901. 滑雪 - AcWing题库

视频讲解901. 滑雪 - AcWing题库

4.3.png

image.png

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 310;
int n,m; //网格滑雪场的行和列
int f[N][N]; //状态转移式
int h[N][N]; //网格滑雪场
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int dp(int x,int y){
    int &v = f[x][y]; //Y总说的小技巧,等于把f[x][y]简化成了v,如果v发生变化,f[x][y]也会随之变化
    if(v != -1) return v; //如果已经计算过了,就可以直接返回答案
    v = 1; //注意v要先赋值为1哦~
    for(int i = 0;i < 4;i ++){ //四个方向
        int xx = x + dx[i];
        int yy = y + dy[i];
        if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && h[x][y] > h[xx][yy]){ //判断这点是否能走
            v = max(v,dp(xx,yy) + 1); //更新
        }
    }
    return v; //别忘了返回v啊(被坑了
}
int main(){
    cin>>n>>m; //输入滑雪场行和列
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= m;j ++){
            cin>>h[i][j]; //读入滑雪场数据
        }
    }
    memset(f,-1,sizeof f);
    int res = 0; //最后答案
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= m;j ++){
            //因为这个人可以在任意一点开始滑,所以要遍历一遍滑雪场
            res = max(res,dp(i,j)); //更新答案
        }
    }
    cout<<res<<endl;
    return 0;
}

1015. 摘花生 - AcWing题库

4.4.png

看到这个题,我一开始没有想到是用dp来写,但是看到那个“最多”,就知道用dp了

#include<iostream>
using namespace std;
const int N = 105;
int a[N][N], f[N][N];
int q, row, col;
int main()
{
    cin >> q;
    while(q--){
        cin >> row >> col;
        for(int i = 1; i <= row; i++){
            for(int j = 1; j <= col; j++){
                cin >> a[i][j];
            }
        }
        // f[i][j]指的是到(i, j)的最大花生数
        for(int i = 1; i <= row; i++){
            for(int j = 1; j <= col; j++){
                f[i][j] = max(f[i-1][j], f[i][j-1]) + a[i][j];
            }
        }
        cout << f[row][col] << endl;
    }
    return 0;
}

Code over!

相关文章
|
XML JSON API
免费手机号码归属地API查询接口
一、淘宝网API    API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON 二、拍拍API   API地址:   http://virtual.
5666 0
|
12月前
|
网络协议 视频直播 网络性能优化
第一问:谈谈你理解的TCP协议
本文介绍了TCP协议的基本概念及其在网络模型中的位置,详细解释了TCP与UDP的区别,重点描述了TCP的三次握手和四次挥手过程,以及TIME_WAIT机制。最后讨论了TCP在实际应用中常见的粘包与拆包问题及其解决方案。
|
前端开发
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
1092 0
|
缓存 JavaScript 前端开发
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
《基础篇第4章:vue2基础》:使用vue脚手架创建项目
342 3
|
存储 测试技术 Go
用功能模型实现一个预约系统
【9月更文挑战第6天】本文介绍功能模型描述系统的功能需求和操作逻辑,常用数据流图(DFD)或用例图表示,关注系统如何处理输入、输出、数据存储和计算。在订餐系统中,功能模型涵盖预约界面交互、数据库访问、菜单列表查询及时段表管理。对象模型描述系统中的类和对象,功能模型则描述这些对象的功能实现;动态模型描述运行时行为。通过封装、抽象、继承、多态、交互、职责分离及数据和行为的统一,功能模型提高代码组织性和可维护性,增强系统灵活性和扩展性。
1057 20
|
传感器 数据采集 数据可视化
基于车辆装载率的车辆作业状态识别
本文介绍了一种基于装卸车事件识别的方案,主要任务是基于车辆内部体积检测传感器上传的时序数据,经过数据处理模块、状态提取模块、事件识别模块、决策模块等模块,对装卸车事件进行识别,并提供详细的事件信息。
606 0
|
存储 安全 Java
|
缓存 监控 负载均衡
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
大家想必都知道在人类健康领域,我们常常警惕“三高”带来的风险,三高是一个不健康的意思,而在数字化世界中,恰恰相反,系统的高性能、高可用性和高稳定性代表着系统的健康和卓越运行,是一个健康的概念。作为开发者怎么能让我们开发的系统保证长期“三高”,那么本文就来简单讨论一下如何让系统长期维持理想的“三高”标准,以及“三高”在实际业务场景中的真实性,并探索一下在技术负责人角色中使用“三高”来评价系统开发工作的可行性等内容,欢迎大家在评论区留言交流。
656 1
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
|
JSON 网络协议 前端开发
【UR六轴机械臂源码】python脱离示教器控制UR机械臂实时采集机器人位姿(优傲机器人)
【UR六轴机械臂源码】python脱离示教器控制UR机械臂实时采集机器人位姿(优傲机器人)
|
Java 应用服务中间件 调度
JavaWeb 速通Listener
JavaWeb——监听器Listener 内容分享。
228 0