首页 > 其他分享 >动态规划

动态规划

时间:2022-09-04 20:33:48浏览次数:96  
标签:6005 int max vector MAXN now 规划 动态

求最长上升/下降子序列

for(int i=1; i<=n; i++){
	f[i] = 1;
    for(int j=1; j<i; j++){
    	if(a[j] < a[i])f[i] = max(f[i], f[j]+1);
	}
}//求最长上升子序列
for(int i=n; i>=1; i--){
	g[i] = 1;
	for(int j=i+1; j<=n; j++){
		if(a[i] > a[j])g[i] = max(g[i], g[j]+1);
	} 
}//求最长下降子序列 

求离散化

//离散化 
int a[100005];
vector<int> v;
for(int i=1; i<=n; i++){
	v.push_back(a[i]);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
//unique():1 2 2 3 -> 1 2 3 2
for(int i=1; i<=n; i++)a[i] = lower_bound(v.begin(),v.end(),a[i])-v.begin()+1;

滚动数组

//滚动数组 
int v[MAXN],w[MAXN],f[2][MAXN],now;
memset(f,~0x3f,sizeof(f));
now=0;
f[now][0] = 0;
for(int i = 1; i <= n; i++){
    //i-1行数组f[now],第i行的数组对应f[now^1] 
    memset(f[now^1], ~0x3f, sizeof(f[now^1]));
    for(int j = 0; j <= m; j++){
    	f[now^1][j] = f[now][j];
    	if(j >= w[i])f[now^1][j] = max(f[now^1][j],f[now][j-w[i]]+v[i])
	}
	now ^= 1;
}

树形DP

P1352 没有上司的舞会

#include<bits/stdc++.h>
using namespace std;
int n,r[6005],l,k,ans,f[6005][2];
vector<int> G[6005];
void dfs(int v,int fa=0){
    f[v][0]=0;//该职员不来
    f[v][1]=r[v];//来
    for(int i=0;i<G[v].size();i++){
        int x=G[v][i];//职员x
        if(x==fa)continue;//避免访问到父亲
        dfs(x,v);//先计算子树x的dp值,保存到f[x][0/1]
        f[v][0]+=max(f[x][0],f[x][1]);//如果不来,快乐指数取两个儿子中最大的
        f[v][1]+=f[x][0];//如果v来,那么x不能来
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&r[i]);
    }
    for(int i=1;i<n;i++){
        scanf("%d%d",&l,&k);
        G[l].push_back(k);
        G[k].push_back(l);//添加l和k是直接的上司和下属
    }
    dfs(1);
    ans=max(f[1][0],f[1][1]);//答案取两种方案中快乐指数最大的
    printf("%d\n",ans);
    system("pause");//防止运行后自动退出,需头文件stdlib.h
    return 0;
}//P1352

标签:6005,int,max,vector,MAXN,now,规划,动态
From: https://www.cnblogs.com/hnzzlxs01/p/16655973.html

相关文章

  • 动态数组
    动态数组1.vector1.1vector说明vector是向量类型,可以容纳许多类型的数据,因此也被称为容器(可以理解为动态数组,是封装好了的类)进行vector操作前应添加头文件......
  • leetcode 674 最长连续递增序列 C/C++ 动态规划,动态规划空间优化,双指针 三种解法,初识
    #if 0class Solution {  //动态规划public:    int findLengthOfLCIS(vector<int>& nums) {        vector<int> dp(nums.size());     ......
  • frida 动态检测工具集
    frida是面向开发、反向工程、安全研究的动态检测工具集特性脚本化可移植强,支持多种语言的免费完备的测试说明frida核心部分基于c编写,使用quickjs注入到目标进......
  • 驱动阻尼振荡器如何工作(动态系统)
    驱动阻尼振荡器如何工作(动态系统)Photoby乔伊班克斯on不飞溅PDM阻尼驱动振荡器:精确可解性、经典状态交叉和自交叉(arXiv)作者:奥马尔·穆斯塔法抽象的:在......
  • 【云原生】K8s pod 动态弹性扩缩容 HAP(metrics-server)
    目录一、概述二、安装metrics-server1)HAP前提条件2)开启APIAggregator3)开始安装metrics-server三、HorizontalPodAutoscaler工作原理1)原理架构图2)HPA扩缩容算法1、......
  • JQuery——动态添加元素导致点击事件失效
    前言因为博皮当前版本有人反馈文章中标题导航点击无法生成;jquery-click-invalid:https://codesandbox.io/s/jquery-click-invalid-forked-xpt352内容一开始我以为......
  • Java动态性
    Java动态性动态语言程序运行时可以改变程序结构或变量类型。典型动态语言:Python、ruby、javascript等C/C++、Java不是动态语言,但Java可称为“准动态语言”,它有一定动态......
  • 用 CSharpCompilation 进行动态编译
    项目里需要用到动态编译。网上一大片的介绍C#动态编译的,是CodeDomProvider,这个东西确实好用。但是说好了支持.net6.0 的,但运行时却说不支持当前平台。骗子!网上找的......
  • Golang 动态脚本调研
    一、技术背景1.1程序的动态链接技术在实际开发过程中,我们经常需要动态地更新程序的功能,或者在不变更程序主体文件的情况下添加或者更新程序模块。1.1.1动态链接库首......
  • 2 工具系统规划和实现的功能
    一:工具系统规划和实现的功能主要技术点攻克:1:程序间调用和参数传递。2:数据文件对应多结构和内部变量定义多结构。3:调用程序间的同数据文件的数据结构。4:共通程序的程序......