首页 > 其他分享 >dp学习笔记

dp学习笔记

时间:2023-08-22 22:33:05浏览次数:37  
标签:Node 状态 int 笔记 学习 ans 序列 dp

前言:因为本人 \(dp\) 实在太差了,故此挖个新坑。

\(dp\) 的一般套路是:

  • 设计状态,要注意一定要不重不漏,所有能影响到答案的数据都要包含到状态里面。

  • 初始化,基本上是第一项

  • 转移,要注意无后效性,面面俱到。

  • 可以关注数据范围,有时候范围会给我们以提醒。

基本技巧:

  • 状态设计:一个条件,一个维度

  • 增加条件,增加维度,改变状态(无后效性)。

  • 求方案数的一般思路是在开一个与之对应的数组。

  • 改变顺序,

  • 消除冗余状态,简化空间(乌龟棋)

  • 循环顺序的界定由转移的顺序决定。

  • 把转移方程写下来之后再去写代码。

  • 用所学过数学模型进行分析

多说无益,真正的还是需要通过做题总结。所以以下就用来写做题总结。

P1233 木棍加工

其实第一眼想到的是一直去跑最长上升子序列直到序列中没有上升子序列,但是这样及其复杂而且难实现。观察题目,发现题目是一个最优性问题,因此我们不难想到排序。以 \(l\) 为第一关键字,\(r\) 为第二关键字从大到小排序然后再跑一遍最长上升子序列即可。

代码:

点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=50005;
struct Node {int l,w;} a[N];
int n,cnt,ans,dp[N];
inline bool cmp(Node a,Node b) {
	if(a.l==b.l) return a.w<b.w;
	else return a.l<b.l;
}
signed main() {
	ios_base::sync_with_stdio(NULL);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>n,cnt=n;
	for(int i=1;i<=n;i++)
		cin>>a[i].l>>a[i].w,dp[i]=1;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=i-1;j++)
			if(a[j].w>a[i].w) dp[i]=max(dp[i],dp[j]+1);
		ans=max(ans,dp[i]);
	}
	cout<<ans;
	return 0;
}

标签:Node,状态,int,笔记,学习,ans,序列,dp
From: https://www.cnblogs.com/endswitch/p/17649864.html

相关文章

  • 学习笔记:DSTAGNN: Dynamic Spatial-Temporal Aware Graph Neural Network for Traffic
    DSTAGNN:DynamicSpatial-TemporalAwareGraphNeuralNetworkforTrafficFlowForecastingICML2022论文地址:https://proceedings.mlr.press/v162/lan22a.html代码地址:https://github.com/SYLan2019/DSTAGNN一个用于时空序列预测的交通流量预测模型。可学习的地方:提出......
  • Jmeter(二十八)加密接口测试笔记
    一、加密接口测试场景1、例如登录操作,输入账号密码,返回token,token是需要加密的2、Jmeter本身没有加解密函数工具二、加密接口和普通接口有什么区别1、发送出去的数据需要进行额外处理,接口测试工具通常不具备这个功能三、如何测试加密接口1、测试数据准备......
  • 算法学习-Manacher
    什么是ManacherManacher算法可以以\(O(|S|)\)的时间复杂度求出一个字符串的最长回文子串。算法过程令\(k_i\)为以\(i\)为回文中心向右扩展到的最远的位置(即若串\(T_{l\simr}\)回文串,那么\(T\)的回文中心为\(T_{\frac{l+r}{2}}\)),注意到偶数长度的串不具有回文中心......
  • Markdown学习笔记
    标题语法标准语法要创建标题,只需要在单词或者短语钱添加井号#。井号的个数代表标题的级别,支持1~6个级别可选语法可以在文本下方添加任意数量的=号来标识一级标题,或者-号来标识二级标题最佳实践为了兼容各类应用程序#和标题之间使用一个空格来分割段落(段落1)使用......
  • 网络编程学习01
    一、进程间通信-socket套接字(很重要,函数啥的都要求要能背)基本特征:socket是一种接口技术,被抽象了一种文件的操作,可以让同一计算机中的不同进程之间通信,也可以让不同计算机中的进程之间通信(网络通信)本地进程间通信编程模型:进程A进程B创建so......
  • 学习C语言第一天
    循环语句和分支语句#include<stdio.h>intmain(){ //输出1~100之间的奇数循环语句的两种表达方式 inti=1; //for(inti=1;i<=100;i++) //{ // if(i%2==1) // { // printf("%d\n",i); // } //} while(i<=100) { if(i%2==1) printf("......
  • 02.前后端分离中台框架前端 admin.ui.plus 学习-介绍与简单使用
    中台框架前台项目admin.ui.plus的初识基于vue3.x+CompositionAPIsetup语法糖+typescript+vite+elementplus+vue-router-next+pinia技术,内置支持一键生成微服务接口,适配手机、平板、pc的后台权限管理框架,希望减少工作量,帮助大家实现快速开发。框架一览......
  • PyTorch数据处理工具箱-新手笔记
    数据下载和预处理是机器学习、深度学习实际项目中耗时又重要的任务,尤其是数据预处理,关系到数据质量和模型性能,往往要占据项目的大部分时间。PyTorch提供了专门的数据下载,数据处理包,可以极大提高开发效率及数据质量。数据处理工具箱概述torch.utils.data工具包:Dataset:一个抽象类......
  • Java学习io流总结
    一、IO的分类按照流向分输入流Input输出流Output按照传输数据的类型来分字节流字节输入:InputStream字节输出:OutputStream字符流字符输入流:Reader字符输出流:Writer按照流连接的目标来分节点流:低级流-->程序(内存)直接连接源文件包装流:高级......
  • [基础] 学习笔记
    1.重载运算符structnode{ intx; booloperator<(constnode&a)const { returnx>a.x;//从小到大 }};priority_queue<node>q;structcmp{ booloperator()(constint&a,constint&b) { ... }};priority_queue&l......