SCAU 动态规划算法

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.mzph.cn/bicheng/9874.shtml

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

相关文章

基于springboot+mybatis+vue的项目实战之页面参数传递

如图所示&#xff0c;删除操作可以用按钮实现&#xff0c;也可以用超链接来实现。 1、第一种情况&#xff0c;用按钮实现。 html页面相关&#xff1a; <button type"button" click"deleteId(peot.id)">删除</button> <script>new Vue(…

【算法与数据结构】数组

文章目录 前言数组数组的定义数组的基本操作增加元素删除元素修改元素查找元素 C STL 中的数组arrayvector Python3 中的列表访问更改元素值遍历列表检查列表中是否存在某元素增加元素删除元素拷贝列表总结 Python3 列表的常用操作 参考资料写在最后 前言 本系列专注更新基本数…

从0开始Jmeter接口测试实战

在之前的文章中给大家介绍过接口测试文档和接口测试用例示例&#xff0c;本文基于Jmeter工具给大家介绍一下如何实现接口测试用例&#xff1a;包括发起Http请求&#xff0c;绕过登陆&#xff0c;验证响应。JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架…

Leetcode—2105. 给植物浇水 II【中等】

2024每日刷题&#xff08;131&#xff09; Leetcode—2105. 给植物浇水 II 实现代码 class Solution { public:int minimumRefill(vector<int>& plants, int capacityA, int capacityB) {int size plants.size();int i 0;int j size - 1;int capA capacityA;in…

【Linux】Linux安装JDK

一、卸载Linux自带的JDK #查询已有的JDK rpm -qa | grep jdk ①将查询到的JDK全部卸载掉 #直接复制一整行的JDK名称 yum -y remove java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 ②卸载完第一个后再次查询 ③继续卸载&#xff0c;卸载完成后再次查询 ④查询…

Flask-大体了解介绍

初识Flask Flask是使用 Python编写的Web微框架。Web框架可以让我们不用关心底层的请求响应处理&#xff0c;更方便高效地编写Web程序。 Flask主要有两个依赖&#xff0c;一个是WSGI&#xff08;Web Server Gateway Interface&#xff0c;Web服务器网关接口&#xff09;工具集…

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1

ICode国际青少年编程竞赛- Python-4级训练场-太阳能板1 1、 Dev.step(3) Dev.turnRight() Dev.step(2) while Dev.energy < 60:wait() Dev.step(-6)2、 Dev.step(7) while Dev.energy < 90:wait() Dev.step(-1) Dev.turnRight() Dev.step(7)3、 Dev.step(4) Dev.turn…

C++面向对象的四大特征

抽象&#xff08;Abstraction&#xff09;&#xff1a; 抽象是指从众多事物中提取出共性的、本质的特征&#xff0c;并忽略非本质的细节&#xff0c;从而形成一种对事物更高级、更一般的描述。在C中&#xff0c;类&#xff08;class&#xff09;是抽象的体现&#xff0c;它定义…

区块链 | NFT 水印:Review on Watermarking Techniques(三)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 一个 NFT 的水印认证协议 可以引入第三方实体来实现对交易的认证&#xff0c;即通过使用 R S A \mathsf{RSA} RSA…

(十)JSP教程——config对象

config对象是脚本程序配置对象&#xff0c;表示当前JSP页面的配置信息。由于JSP页面通常无需配置&#xff0c;因此该对象在JSP页面中比较少见。 config对象可以读取一些初始化参数的值&#xff0c;而这些参数一般在web.xml配置文件中可以看到&#xff0c;并通过config对象的相应…

国内护眼台灯品牌哪些实用?推荐五款物美价廉的台灯品牌

近年来&#xff0c;我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化&#xff0c;部分原因可以归咎于孩子们越来越多地使用电子产品&#xff0c;另一部分则与他们面临的学业压力增加有关。鉴于此&#xff0c;家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

GESP 四级题单(困难) • 附免费参考答案

GESP 四级题单 [GESP202309 四级] 变长编码题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 参考答案代码解析 [GESP202403 四级] 做题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规…

Sqli-labs第五~八关(布尔盲注)

目录 首先找到他们的闭合方式 操作 总结&#xff1a; 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用&#xff0c;因为联合注入是需要页面有回显位。如果…

微信小程序父子组件通信

1. 属性传值 属性传值是最常见、也是最基础的父子组件通信方式之一。在微信小程序中&#xff0c;父组件可以通过在子组件上绑定属性的方式向子组件传递数据&#xff0c;子组件则可以通过监听属性的变化来获取父组件传递过来的数据。 实现原理 父组件在使用子组件时&#xff…

UDP socket编程示例

服务端&#xff1a; #include <iostream> #include <cstring> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h>const int BUFFER_SIZE 1024;//TODO 使用多线…

鸿蒙开发接口Ability框架:【@ohos.application.Want (Want)】

Want Want模块提供系统的基本通信组件的能力。 说明&#xff1a; 本模块首批接口从API version 8 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import Want from ohos.application.Want; 开发前请熟悉鸿蒙开发指导文档&#xff1…

nginx--rewrite

功能 Nginx服务器利用ngx_http_rewrite_module 模块解析和处理理rewrite请求&#xff0c;此功能依靠PCRE(Perl Compatible Regular Expressions)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的重写&#xff0…

力扣:300. 最长递增子序列(Java,动态规划)

目录 题目描述&#xff1a;示例 1&#xff1a;示例 2&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中…

《Video Mamba Suite》论文笔记(4)Mamba在时空建模中的作用

原文翻译 4.4 Mamba for Spatial-Temporal Modeling Tasks and datasets.最后&#xff0c;我们评估了 Mamba 的时空建模能力。与之前的小节类似&#xff0c;我们在 Epic-Kitchens-100 数据集 [13] 上评估模型在zero-shot多实例检索中的性能。 Baseline and competitor.ViViT…

【网络编程】UDP协议和TCP协议1

UDP协议格式 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。 UDP协议如何将报头和有效载荷分离 UDP报头是一种定长报头&#xff0c;长度为8个字节。…