SCAU 动态规划算法

news/2024/5/21 4:33:52

8615 快乐

Description

做出第i道题后,快乐指数将增加gethappy[i],消耗掉的精力将是losspow[i]
初始的快乐指数为1,精力为2000
最终剩余的精力必须大于0
计算得到的最多的快乐指数

输入格式

第一行输入一个整数n,表示有n道题。(n<=50)
第二行输入n个整数,表示gethappy[1]到gethappy[n]
第三行输入n个整数,表示losspow[1]到losspow[n]。

输出格式

一个整数,表示Lian所能获得的最大快乐指数。

输入样例


3
15 23 61
350 1301 1513

输出样例

77

01背包问题
只需注意两个细节:
(1)初始快乐指数为1
(2)剩余精力大于0

#include <iostream>
#include <cmath>
#include<algorithm>
#include <cstring>
#include <queue>
using namespace std;const int N = 2500;
int v[N];    // 精力
int w[N];    // 快乐 
int f[N][N];  // f[i][j], j精力下前i题的最大快乐指数 int main()
{int n, m;cin >> n;m = 2000;for (int i = 1; i <= n; i++)cin >> w[i];for (int i = 1; i <= n; i++)cin >> v[i];for (int i = 1; i <= n; i++)//保证最后的精力1for (int j = 1; j <= m - 1; j++){// 当前精力做不了下一题,则快乐等于前i-1题f[i][j] = f[i - 1][j];// 能做,需进行决策是否选择要做if (j >= v[i])bf[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);}//初始快乐为1,所以加1cout << f[n][m - 1] + 1 << endl;return 0;
}

一维优化

#include <iostream>
#include <cmath>
#include<algorithm>
#include <cstring>
#include <queue>
using namespace std;const int N = 2500;
int v[N];    // 精力
int w[N];    // 快乐 
int f[N];  // f[j], j精力下的最大快乐指数 int main()
{int n, m;cin >> n;m = 2000;for (int i = 1; i <= n; i++)cin >> w[i];for (int i = 1; i <= n; i++)cin >> v[i];for (int i = 1; i <= n; i++)for (int j = m-1; j >= v[i]; j--)f[j] = max(f[j], f[j - v[i]] + w[i]);cout << f[m - 1] + 1 << endl;return 0;
}

18705 01背包问题

Description

有一个容积为M的背包和N件物品。第i件物品的体积W[i],价值是C[i]。求解将哪些物品装入背包可使价值总和最大。每种物品只有一件,
可以选择放或者不放入背包。

输入格式

第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
第2…N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。

输出格式

一个数,表示最大总价值。

输入样例


10 4
2 1
3 3
4 5
7 9

输出样例

12

01背包
即对某一物品最多选取一次
状态表示:
f(i)(j), j体积下前i个物品的最大价值
状态转移方程:
f[i][j] = f[i - 1][j];
f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);

#include <iostream>
#include<cstring>
using namespace std;const int MAXN = 1500;
int v[MAXN];    // 体积
int w[MAXN];    // 价值 
int f[MAXN][MAXN];  // f[i][j], j体积下前i个物品的最大价值 int main() 
{int n, m;   cin >> n >> m;for(int i = 1; i <= n; i++) cin >> v[i] >> w[i];for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){//  当前背包容量装不进第i个物品,则价值等于前i-1个物品f[i][j] = f[i - 1][j];// 能装,需进行决策是否选择第i个物品if(j>=v[i])    f[i][j] = max(f[i - 1][j], f[i - 1][j - v[i]] + w[i]);}           cout << f[n][m] << endl;return 0;
}

一维优化

#include <iostream>
#include <cmath>
#include<algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1005;int f[N];//j体积的最大价值 
int v[N];//体积
int w[N];//价值int n,m;int main() {ios::sync_with_stdio(0), cin.tie(0);cin >> m >> n;for (int i = 1; i <=n ; i++)cin >> v[i] >> w[i];for (int i = 1; i <= n; i++) {for (int j = m; j >= v[i]; j -- ) {f[j] = max(f[j], f[j - v[i]] + w[i]);}}cout << f[m] << endl;return 0;
}

18308 最长公共子序列

Description

给定两个字符串,请输出这两个字符串的最大公共子序列

输入格式

两行,一行一个字符串(不包括空格,Tab键),长度不超过1000

输出格式

输出最大公共子序列的长度

输入样例

abbca
aba

输出样例

3

状态表示:
f [i] [j]:表示字符串 a 的前 i 个字符和字符串 b 的前 j 个字符之间的最长公共子序列的长度

#include <iostream>
#include<cstring>
using namespace std;
const int N = 1010;
char a[N], b[N];
int f[N][N];
int main() {cin >> a+1  >> b +1;int n = strlen(a+1), m = strlen(b+1);// cout << n << m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (a[i] == b[j]) f[i][j] = f[i - 1][j - 1] + 1;else f[i][j] = max(f[i - 1][j], f[i][j - 1]);}}cout << f[n][m] << '\n';return 0;
}

8596 最长上升子序列

Description

当元素 ai1 < ai2 < … < aiK. 就说这个序列是有序上升的。

给定序列(a1, a2, …, aN),存在许多这样的子序列(ai1, ai2, …, aiK),
其中1 <= i1 < i2 < … < iK <= N.
也就是说,子序列是原序列允许挑选若干不连续的元素形成的序列。

举个例子,序列 (1, 7, 3, 5, 9, 4, 8) 就有许多个上上子序列,比如(1, 7), (3, 4, 8) 等。
所有这些上升子序列中最长的长度为4,比如 (1, 3, 5, 8).

你来编程实现,当给定一个初始序列,寻找这个序列的最长上升子序列。

输入格式

此例包含多个测试cases(少于100组test cases)。
每一组test case包含2行。
第一行是这组case的序列长度 N。(N的范围0~10000)
第二行包含 N个整数的一个序列,用空格间隔这N个整数, 1 <= N <= 10000。

当N为0时,表示测试结束。

输出格式

输出必须对每个test case,都有一个整数结果,表示这组case的最长上升子序列的长度。

输入样例

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

输出样例

4
4
5

#include <iostream>
#include <algorithm>
#include <queue>
#include<string>
using namespace std;
const int N = 10100;
int n;
int a[N];//数组a存序列
int f[N];//f[i]表示:直到第i个元素的最大上升子序列
int main()
{while (cin>>n && n) {for (int i = 0; i < n; i++) {cin >> a[i];f[i] = 1;}//初始化为1,表示最少有1个上升子序列//j在前,i在后,用前来更新后for (int i = 0; i < n; i++) for (int j = 0; j < i; j++) //状态转移if (a[j] < a[i]) f[i] = max(f[j] + 1, f[i]);                   int ans = 0;for (int i = 0; i < n; i++)ans = max(ans, f[i]);cout << ans << endl;}return 0;
}

http://www.mrgr.cn/p/37656111

相关文章

力扣-题号2997

2997. 使数组异或和等于 K 的最少操作次数题目给你一个下标从 0 开始的整数数组 nums 和一个正整数 k 。 你可以对数组执行以下操作 任意次 :选择数组里的 任意 一个元素,并将它的 二进制 表示 翻转 一个数位,翻转数位表示将 0 变成 1 或者将 1 变成 0 。你的目标是让数组里…

现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

1、前言 众所周之,通常开发一个移动端应用,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理。 但对于追求用户体验的应用来说,还会针对移动网络的特性做进一步优化,包括: 1)速度优化:网络请求的速度怎样能进一步提升? 2)弱网适应:移…

第08章 IP分类编址和无分类编址

8.1 本章目标 了解IP地址的用途和种类了解分类编址和无分类编址区别掌握IP地址、子网掩码、网关概念及使用掌握子网划分及超网划分方法掌握无分类编址的改变和使用 8.2 IP地址的用途和种类 分类编址&#xff1a;造成地址的浪费&#xff0c;以及地址不够用&#xff1b;无分类编…

JavaScript数字分隔符

● 如果现在我们用一个很大的数字&#xff0c;例如2300000000&#xff0c;这样真的不便于我们进行阅读&#xff0c;我们希望用千位分隔符来隔开它&#xff0c;例如230,000,000; ● 下面我们使用_当作分隔符来尝试一下 const diameter 287_266_000_000; console.log(diameter)…

手机H5页面在IOS系统中无法获取Geolocation

需求 在开发H5页面的时候希望获取用户的地理位置信息,这里演示在用户上传图片的时候将用户的地理位置信息作为水印显示。 问题 在安卓手机使用vant-upload组件是没问题的,但是在IOS手机上有,报下面的提示信息。原因 苹果的IOS做了限制,如果需要使用IOS的服务,必须是HTTS协…

【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)

【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)是期刊“NEURAL COMPUTING & APPLICATIONS”&#xff08;IF 6.0&#xff09;的2021年智能优化算法 01.引言 【智能优化算法】卷尾猴搜索算法(Capuchin search algorithm,CapSA)用于解决约束和全局优化问…

【负载均衡式在线OJ项目day4】编译运行功能整合及打包网络服务

一.前言 前面两天完成了编译和运行两个子模块&#xff0c;今天的任务是完成CompileRun模块&#xff0c;它的任务如下&#xff1a; 解析来自客户端的Json字符串&#xff0c;反序列化提取编译运行需要的数据&#xff0c;即代码&#xff0c;时间限制和空间限制把代码写入临时文件…

盘多啦使用教程

为什么要做副业 不管是在疫情前还是疫情后,相对于普通人来说,本质工作仅仅是能够负担起正常的生活开支。反而副业才是你真正的收入。有些人会通过股票、基金等等金钱上的投资去赚取这部分的收入,但是往往伴随着高风险、高收益。那有没有什么副业是“安全,无副作用”的呢,答…

25-有参转录组实战11-上传转录组到NCBI

上传转录组到NCBI登录NCBI>点击submit>选SRA>选Project>点New submission 1 SUBMITTER 填写名字,邮件,no group,学校学院,街道邮编国家,continue 2 GENERAL INFO 填no BioProject, no BioSample,立马释放数据。 3 PROJECT INFO 填个title和description,no…

项目冲刺day3

这个作业属于哪个课程 软工4班这个作业要求在哪里 作业要求1.会议1. 照片 时间冲突,采用微信聊天方式2. 昨日已完成: 完成登录、注册功能,部分完成用户中心功能3.今天计划完成的工作 用户中心功能、订单管理功能4.工作中遇到的困难 沟通和信息共享并不总是顺利。这导致了一些…

MySQL面试必备二之binlog日志

本文首发于公众号:Hunter后端 原文链接:MySQL面试必备二之binlog日志关于 binlog,常被问到几个面试问题如下:binlog 是什么 binlog 都记录什么数据 binlog 都有哪些类型,都有什么特点 如何使用 binlog 恢复数据 binlog 都有哪些作用 binlog 属于逻辑日志还是物理日志基于上…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

Android GPU渲染屏幕绘制显示基础概念(1)

Android GPU渲染屏幕绘制显示基础概念&#xff08;1&#xff09; Android中的图像生产者OpenGL&#xff0c;Skia&#xff0c;Vulkan将绘制的数据存放在图像缓冲区中&#xff0c;Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出&#xff0c;进行加工及合成。 Surface…

开源RAG框架汇总

前言 本文搜集了一些开源的基于LLM的RAG(Retrieval-Augmented Generation)框架,旨在吸纳业界最新的RAG应用方法与思路。如有错误或者意见可以提出,同时也欢迎大家把自己常用而这里未列出的框架贡献出来,感谢~ RAG应用框架RAGFlow项目地址:https://github.com/infiniflow/…

kali中arp欺骗,连上校园网断舍友的网

首先kali的配置: 参考网站:https://jingyan.baidu.com/article/2c8c281d145cf44108252a97.html 然后下载arpspoof插件: apt-get install dsniff然后一条命令: arpspoof -i eth0 -t 受害者的ip 网关//这个网关是你自己连上校园网的那个网关

Scrum冲刺4--5.10

Scrum冲刺4--5.10这个作业属于哪个课程 软件工程这个作业要求在哪里 团队项目这个作业的目标 进行敏捷冲刺,熟悉团队合作开发前端仓库 前端后端仓库 后端每次冲刺日志索引时间 博客5.7 Day1ᕙ(`▿)ᕗ5.8 Day2ᕙ(• ॒ ູ•)ᕘ5.9 Day3(˚ ˃̣̣̥᷄⌓˂̣̣̥᷅ )5.10 Day4 (…

Navicat Data Modeler Ess for Mac:强大的数据库建模设计软件

Navicat Data Modeler Ess for Mac是一款专为Mac用户设计的数据库建模与设计工具&#xff0c;凭借其强大的功能和直观的界面&#xff0c;帮助用户轻松构建和管理复杂的数据库模型。 Navicat Data Modeler Ess for Mac v3.3.17中文直装版下载 这款软件支持多种数据库系统&#x…

敏捷冲刺day3--数字工匠队

这个作业属于哪个课程 软件工程这个作业的要求是什么 项目冲刺这个作业的目标 冲刺日志3站立式会议照片工作困难 处理任务时遇到一些问题需要上网学习花费时间 昨日完成工作 部分登录界面前后端处理代码 今日计划工作 继续完成登录界面前后端处理 项目燃尽图每日总结 邹嘉伟:继…

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据&#xff0c;使用机器…

第 3 篇 Scrum 冲刺博客

每天举行站立式会议 昨天已完成的工作: 今天计划完成的工作: 工作中遇到的困难: 项目燃尽图代码/文档签入记录项目展示每日每人总结 李健宇:明天加油。 陈彦煤:尽力完成,克服困难。