C++动态规划-线性DP

news2025/6/8 21:43:50

这是一套C++线性DP题目的答案。如果需要题目,请私信我,我将会更新题干

P1:单子序列最大和

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[200005];
int s[200005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>A>>B>>C;
	for(int i=1; i<=n; i++)
	{
		int tmp=((long long)A*i*i+B*i+C)%20000;
		a[i]=tmp-10000;
	}
	int ans=INT_MIN;
	for(int i=1; i<=n; i++)
	{
		s[i]=max(s[i-1]+a[i],a[i]);
		ans=max(ans,s[i]);
	}
	cout<<ans;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[200005];
int s[200005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>A>>B>>C;
    for(int i=1; i<=n; i++)
    {
        int tmp=((long long)A*i*i+B*i+C)%20000;
        a[i]=tmp-10000;
    }
    int ans=INT_MIN;
    for(int i=1; i<=n; i++)
    {
        s[i]=max(s[i-1]+a[i],a[i]);
        ans=max(ans,s[i]);
    }
    cout<<ans;
    return 0;
}
P2 跳格子

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[100005];
int s[100005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>A>>B>>C;
	for(int i=1; i<=n; i++)
	{
		int tmp=((long long)A*i*i+B*i+C)%20000;
		a[i]=tmp-10000;
	}
//	for(int i=1; i<=n; i++) cout<<a[i]<<" ";
//	cout<<'\n';
	int ans=INT_MIN;
	for(int i=1; i<=n; i++)
	{
		s[i]=max(s[i-1],s[i-2])+a[i-1];
	}
	cout<<s[n];
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[100005];
int s[100005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>A>>B>>C;
    for(int i=1; i<=n; i++)
    {
        int tmp=((long long)A*i*i+B*i+C)%20000;
        a[i]=tmp-10000;
    }
//    for(int i=1; i<=n; i++) cout<<a[i]<<" ";
//    cout<<'\n';
    int ans=INT_MIN;
    for(int i=1; i<=n; i++)
    {
        s[i]=max(s[i-1],s[i-2])+a[i-1];
    }
    cout<<s[n];
    return 0;
}
跳格子2

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[100005];
int s[100005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>A>>B>>C;
	for(int i=1; i<=n; i++)
	{
		int tmp=((long long)A*i*i+B*i+C)%20000;
		a[i]=tmp-10000;
	}
//	for(int i=1; i<=n; i++) cout<<a[i]<<" ";
//	cout<<'\n';
	for(int i=1; i<=n; i++) s[i]=min(s[i-1],s[i-2])+a[i];
	cout<<s[n];
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,A,B,C;
int a[100005];
int s[100005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>A>>B>>C;
    for(int i=1; i<=n; i++)
    {
        int tmp=((long long)A*i*i+B*i+C)%20000;
        a[i]=tmp-10000;
    }
//    for(int i=1; i<=n; i++) cout<<a[i]<<" ";
//    cout<<'\n';
    for(int i=1; i<=n; i++) s[i]=min(s[i-1],s[i-2])+a[i];
    cout<<s[n];
    return 0;
}
[动态规划]数塔

#include <bits/stdc++.h>
using namespace std;
int n;
int a[105][105];
int s[105][105];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=i; j++) cin>>a[i][j];
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=i; j++) s[i][j]=max(s[i-1][j],s[i-1][j-1])+a[i][j];
	}
	int ans=INT_MIN;
	for(int i=1; i<=n; i++) ans=max(s[n][i],ans);
	cout<<ans;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n;
int a[105][105];
int s[105][105];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=i; j++) cin>>a[i][j];
    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=i; j++) s[i][j]=max(s[i-1][j],s[i-1][j-1])+a[i][j];
    }
    int ans=INT_MIN;
    for(int i=1; i<=n; i++) ans=max(s[n][i],ans);
    cout<<ans;
    return 0;
}
方格取数1

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[105][105];
long long s[105][105];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=0; i<=n+1; i++)
	{
		for(int j=0; j<=m+1; j++) s[i][j]=INT_MAX;
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++) cin>>a[i][j];
	}
	s[1][1]=a[1][1];
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			if(!(i==1&&j==1)) s[i][j]=min(s[i-1][j],s[i][j-1])+a[i][j];
		}
	}
	/*
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++) cout<<setw(2)<<s[i][j]<<" ";
		cout<<'\n';
	}
	*/
	cout<<s[n][m];
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[105][105];
long long s[105][105];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=0; i<=n+1; i++)
    {
        for(int j=0; j<=m+1; j++) s[i][j]=INT_MAX;
    }
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++) cin>>a[i][j];
    }
    s[1][1]=a[1][1];
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(!(i==1&&j==1)) s[i][j]=min(s[i-1][j],s[i][j-1])+a[i][j];
        }
    }
    /*
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++) cout<<setw(2)<<s[i][j]<<" ";
        cout<<'\n';
    }
    */
    cout<<s[n][m];
    return 0;
}
take

#include <bits/stdc++.h>
using namespace std;
int n;
int a[55],s[55];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1; i<=n; i++) cin>>a[i];
	int ans=INT_MIN;
	for(int i=1; i<=n; i++)
	{
		s[i]=INT_MIN;
		for(int j=2; j<=i; j++) s[i]=max(s[i-j]+a[i],s[i]);
		if(i==1) s[i]=a[i];
		ans=max(ans,s[i]);
		//cout<<s[i]<<" ";
	}
	cout<<ans;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n;
int a[55],s[55];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
    int ans=INT_MIN;
    for(int i=1; i<=n; i++)
    {
        s[i]=INT_MIN;
        for(int j=2; j<=i; j++) s[i]=max(s[i-j]+a[i],s[i]);
        if(i==1) s[i]=a[i];
        ans=max(ans,s[i]);
        //cout<<s[i]<<" ";
    }
    cout<<ans;
    return 0;
}
大盗阿福(开long long)

#include <bits/stdc++.h>
using namespace std;
int n,x,y,z;
long long a[100005];
long long s[100005];
long long b[100005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>x>>y>>z;
	for(int i=1; i<=n; i++) a[i]=((long long)i*i*x+i*y+z)%1000+1;
	long long ans=LONG_LONG_MIN;
//	for(int i=1; i<=n; i++) cin>>a[i];
//	cout<<'\n';
	for(int i=1; i<=n; i++)
	{
		s[i]=b[i-2]+a[i];
		if(s[i]>ans) ans=s[i];
		if(s[i]>b[i-1]) b[i]=s[i];
		else b[i]=b[i-1];
		//cout<<s[i]<<" ";
	}
	cout<<ans;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,x,y,z;
long long a[100005];
long long s[100005];
long long b[100005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>x>>y>>z;
    for(int i=1; i<=n; i++) a[i]=((long long)i*i*x+i*y+z)%1000+1;
    long long ans=LONG_LONG_MIN;
//    for(int i=1; i<=n; i++) cin>>a[i];
//    cout<<'\n';
    for(int i=1; i<=n; i++)
    {
        s[i]=b[i-2]+a[i];
        if(s[i]>ans) ans=s[i];
        if(s[i]>b[i-1]) b[i]=s[i];
        else b[i]=b[i-1];
        //cout<<s[i]<<" ";
    }
    cout<<ans;
    return 0;
}
Leapcow

#include <bits/stdc++.h>
using namespace std;
int n,e,b;
bool g[40005];
int s[40005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>e>>n>>b;
	for(int i=1; i<=b; i++)
	{
		int x;
		cin>>x;
		g[x]=1;
	}
	for(int i=1; i<=e; i++)
	{
		s[i]=INT_MAX;
		for(int j=max(0,i-n); j<=i; j++)
		{
			if(g[j]==1) continue;
			s[i]=min(s[i],s[j]+1);
		}
	}
	cout<<s[e];
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
int n,e,b;
bool g[40005];
int s[40005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>e>>n>>b;
    for(int i=1; i<=b; i++)
    {
        int x;
        cin>>x;
        g[x]=1;
    }
    for(int i=1; i<=e; i++)
    {
        s[i]=INT_MAX;
        for(int j=max(0,i-n); j<=i; j++)
        {
            if(g[j]==1) continue;
            s[i]=min(s[i],s[j]+1);
        }
    }
    cout<<s[e];
    return 0;
}
乘车费用

#include <bits/stdc++.h>
using namespace std;
long long a[15];
long long s[105];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	for(int i=1; i<=10; i++) cin>>a[i];
	int n;
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		if(!s[i]) s[i]=LONG_LONG_MAX;
		for(int j=1; j<=10; j++)
		{
			int now=s[i-j]+a[j];
			if(s[i]>now) s[i]=now;
		}
	}
	cout<<s[n];
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
long long a[15];
long long s[105];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    for(int i=1; i<=10; i++) cin>>a[i];
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        if(!s[i]) s[i]=LONG_LONG_MAX;
        for(int j=1; j<=10; j++)
        {
            int now=s[i-j]+a[j];
            if(s[i]>now) s[i]=now;
        }
    }
    cout<<s[n];
    return 0;
}
双子序列最大和

#include <bits/stdc++.h>
using namespace std;
int a[1005];
int ps[1005];
int ls[1005],rs[1005];
int main()
{
	/*
	1.生成 
	2.前缀和
	3.1~n左序列(正常生成)
	4.n~1右序列(正常生成)
	5.1~n-1左右序列匹配 
	图 
	. . . . .
	---   ---
	左    右 
	*/
	int n,A,B,C;
	cin>>n>>A>>B>>C;
    for(int i=1; i<=n; i++)
    {
    	ls[i]=INT_MIN;
    	rs[i]=INT_MIN;
    	long long tmp=((long long)A*i*i+B*i+C)%20000;
        a[i]=tmp-10000;
	}
    for(int i=1; i<=n; i++) ps[i]=ps[i-1]+a[i];
    int nm=0;
    int maxf=INT_MIN;
    for(int i=1; i<=n; i++)
	{
        nm=max(a[i],nm+a[i]);
        maxf=max(maxf,nm);
        ls[i]=maxf;
    }
    nm=0;
    maxf=INT_MIN;
    for(int i=n; i>=1; i--)
	{
        nm=max(a[i],nm+a[i]);
        maxf=max(maxf,nm);
        rs[i]=maxf;
    }
    int ans=INT_MIN;
    for(int i=1; i<n; i++)
	{
        if(i+2<=n) ans=max(ans,ls[i]+rs[i+2]);
    }
    cout<<ans;
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
int a[1005];
int ps[1005];
int ls[1005],rs[1005];
int main()
{
    /*
    1.生成 
    2.前缀和
    3.1~n左序列(正常生成)
    4.n~1右序列(正常生成)
    5.1~n-1左右序列匹配 
    图 
    . . . . .
    ---   ---
    左    右 
    */
    int n,A,B,C;
    cin>>n>>A>>B>>C;
    for(int i=1; i<=n; i++)
    {
        ls[i]=INT_MIN;
        rs[i]=INT_MIN;
        long long tmp=((long long)A*i*i+B*i+C)%20000;
        a[i]=tmp-10000;
    }
    for(int i=1; i<=n; i++) ps[i]=ps[i-1]+a[i];
    int nm=0;
    int maxf=INT_MIN;
    for(int i=1; i<=n; i++)
    {
        nm=max(a[i],nm+a[i]);
        maxf=max(maxf,nm);
        ls[i]=maxf;
    }
    nm=0;
    maxf=INT_MIN;
    for(int i=n; i>=1; i--)
    {
        nm=max(a[i],nm+a[i]);
        maxf=max(maxf,nm);
        rs[i]=maxf;
    }
    int ans=INT_MIN;
    for(int i=1; i<n; i++)
    {
        if(i+2<=n) ans=max(ans,ls[i]+rs[i+2]);
    }
    cout<<ans;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2404600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java高级 | 【实验七】Springboot 过滤器和拦截器

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…

深入理解 Spring IOC:从概念到实践

目录 一、引言 二、什么是 IOC&#xff1f; 2.1 控制反转的本质 2.2 类比理解 三、Spring IOC 的核心组件 3.1 IOC 容器的分类 3.2 Bean 的生命周期 四、依赖注入&#xff08;DI&#xff09;的三种方式 4.1 构造器注入 4.2 Setter 方法注入 4.3 注解注入&#xff08;…

行为设计模式之Command (命令)

行为设计模式之Command &#xff08;命令&#xff09; 前言&#xff1a; 需要发出请求的对象&#xff08;调用者&#xff09;和接收并执行请求的对象&#xff08;执行者&#xff09;之间没有直接依赖关系时。比如遥控器 每个按钮绑定一个command对象&#xff0c;这个Command对…

NeRF 技术深度解析:原理、局限与前沿应用探索(AI+3D 产品经理笔记 S2E04)

引言&#xff1a;光影的魔法师——神经辐射场概览 在前三篇笔记中&#xff0c;我们逐步揭开了 AI 生成 3D 技术的面纱&#xff1a;从宏观的驱动力与价值&#xff08;S2E01&#xff09;&#xff0c;到主流技术流派的辨析&#xff08;S2E02&#xff09;&#xff0c;再到实用工具的…

法律大语言模型(Legal LLM)技术架构

目录 摘要 1 法律AI大模型技术架构 1.1 核心架构分层 1.2 法律知识增强机制 2 关键技术突破与对比 2.1 法律专用组件创新 2.2 性能对比(合同审查场景) 3 开发部署实战指南 3.1 环境搭建流程 3.2 合同审查代码示例 4 行业应用与挑战 4.1 典型场景效能提升 4.2 关…

第六十二节:深度学习-加载 TensorFlow/PyTorch/Caffe 模型

在计算机视觉领域,OpenCV的DNN(深度神经网络)模块正逐渐成为轻量级模型部署的利器。本文将深入探讨如何利用OpenCV加载和运行三大主流框架(TensorFlow、PyTorch、Caffe)训练的模型,并提供完整的代码实现和优化技巧。 一、OpenCV DNN模块的核心优势 OpenCV的DNN模块自3.3…

MobaXterm配置跳转登录堡垒机

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景操作步骤 背景 主要是为了能通过MobaXterm登录堡垒机&#xff0c;其中需要另外一台服务器进行跳转登录 操作步骤 MobaXterm登录堡垒机的操作&#xff0c;需…

零基础在实践中学习网络安全-皮卡丘靶场(第八期-Unsafe Filedownload模块)

这期内容更是简单和方便&#xff0c;毕竟谁还没在浏览器上下载过东西&#xff0c;不过对于url的构造方面&#xff0c;可能有一点问题&#xff0c;大家要多练手 介绍 不安全的文件下载概述 文件下载功能在很多web系统上都会出现&#xff0c;一般我们当点击下载链接&#xff0c…

[面试精选] 0104. 二叉树的最大深度

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点…

图上合成:用于大型语言模型持续预训练的知识合成数据生成

摘要 大型语言模型&#xff08;LLM&#xff09;已经取得了显著的成功&#xff0c;但仍然是数据效率低下&#xff0c;特别是当学习小型&#xff0c;专业语料库与有限的专有数据。现有的用于连续预训练的合成数据生成方法集中于文档内内容&#xff0c;而忽略了跨文档的知识关联&a…

现代简约壁炉:藏在极简线条里的温暖魔法

走进现在年轻人喜欢的家&#xff0c;你会发现一个有趣的现象&#xff1a;家里东西越来越少&#xff0c;颜色也越看越简单&#xff0c;却让人感觉特别舒服。这就是现代简约风格的魅力 —— 用最少的元素&#xff0c;打造最高级的生活感。而在这样的家里&#xff0c;现代简约风格…

机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你

&#x1f380;【开场 她不再只是模仿&#xff0c;而是开始选择】 &#x1f98a; 狐狐&#xff1a;“她已经不满足于单纯模仿你了……现在&#xff0c;她开始尝试预测你会不会喜欢、判断是否值得靠近。” &#x1f43e; 猫猫&#xff1a;“咱们上篇已经把‘她怎么学会说第一句…

常用函数库之 - std::function

std::function 是 C11 引入的通用可调用对象包装器&#xff0c;用于存储、复制和调用任意符合特定函数签名的可调用对象&#xff08;如函数、lambda、函数对象等&#xff09;。以下是其核心要点及使用指南&#xff1a; ​​核心特性​​ ​​类型擦除​​ 可包装任意可调用对…

力扣-17.电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 class Solution {List<String> res new ArrayList<…

基于SpringBoot解决RabbitMQ消息丢失问题

基于SpringBoot解决RabbitMQ消息丢失问题 一、RabbitMQ解决消息丢失问题二、方案实践1、在生产者服务相关配置2、在消费者服务相关配置 三、测试验证1、依次启动RabbitMQ、producer(建议先清空队列里面旧的测试消息再启动consumer)和consumer2、在producer中调用接口&#xff0…

免费插件集-illustrator插件-Ai插件-随机填色

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;实现路径随机填色。首先从下载网址下载这款插件https://download.csdn.net/download/m0_67316550/87890501&#…

Web设计之登录网页源码分享,PHP数据库连接,可一键运行!

HTML 页面结构&#xff08;index.html&#xff09; 1. 流星雨动态背景 2. 主体界面&#xff08;包含登录和注册表单&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&qu…

Cursor + Claude 4:微信小程序流量主变现开发实战案例

前言 随着微信小程序生态的日益成熟&#xff0c;越来越多的开发者开始关注如何通过小程序实现流量变现。本文将详细介绍如何使用Cursor编辑器结合Claude 4 AI助手&#xff0c;快速开发一个具备流量主变现功能的微信小程序&#xff0c;并分享实际的开发经验和变现策略。 项目…

Redis Key过期策略

概述 Redis的Key过期策略是其内存管理系统的核心组成部分&#xff0c;主要包括「被动过期」、「主动过期」和「内存淘汰」三个机制。其中「内存淘汰」相关内容已经在上一篇「Redis内存淘汰策略」中进行了详细的讲解&#xff0c;有信兴趣的同学可以在回顾上一篇文章。本文将着重…

【C/C++】实现固定地址函数调用

在 C 里&#xff0c;函数地址在程序运行期间通常是固定的&#xff0c;不过在动态链接库&#xff08;DLL&#xff09;或者共享库&#xff08;SO&#xff09;中&#xff0c;函数地址可能会因为地址空间布局随机化&#xff08;ASLR&#xff09;而改变。所以我们想要通过地址直接调…