五一快乐加餐(动态规划)4题综合版(每日更新5.3已更)

2023-10-28 09:59

本文主要是介绍五一快乐加餐(动态规划)4题综合版(每日更新5.3已更),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 1.五(背包)

 解题思路:背包问题,通过每一步的局部最优解,来找到最优解。

#include<iostream>
#include<algorithm>
using namespace std;
int w[30],v[30],f[50000];//w数组为重要度,v数组为money,f是用来dp的数组
int n,m;//n是总物品个数,m是总钱数
int main()
{cin>>m>>n;//输入for(int i=1;i<=n;i++){cin>>v[i]>>w[i];w[i]*=v[i];//w数组在这里意义变为总收获(重要度*money)}//01背包(参照第二类模板“一维数组优化”)for(int i=1;i<=n;i++){for(int j=m;j>=v[i];j--)//注意从m开始{if(j>=v[i]){f[j]=max(f[j],f[j-v[i]]+w[i]);//dp}}}cout<<f[m]<<endl;//背包大小为m时最大值return 0;
} 

2.一(背包

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,M,T,dp[1010][1010];
int m[1010],t[1010];
int main()
{scanf("%d%d%d",&n,&M,&T);for(int i=1;i<=n;i++){//仅仅只是多了一维而已 scanf("%d%d",&m[i],&t[i]);for(int j=M;j>=m[i];j--)for(int k=T;k>=t[i];k--){dp[j][k]=max(dp[j][k],dp[j-m[i]][k-t[i]]+1);}}printf("%d\n",dp[M][T]);
}

3.乐(线性

思路: 
先从后往前循环,计算出 该数 的最长不上升子序列,记录下来,开始下一个数,不需一个个去查找,只要满足比往后的一个数大,就直接判断是该数的序列长度+1(至于为什么+1,代码上解释)长还是本身长。

389 207 155 300 299 170 158 65

以这组样例为例,看一下表格。

第二问用最长不下降子序列的长度回答即可

| | i=8 | i=7 |i=6 | i=5 | i=4 | i=3 | i=2 |i=1 | | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | -----------: | |f[1]| 0 | 0 | 0 | 0 | 0| 0 | 0| 6 | |f[2] |0 | 0 |0 |0 |0 |0 |4 | 4| | |f[3] | 0 |0 | 0 | 0 | 0| 2 |2 | 2| |f[4]|0 |0 | 0 |0 | 5| 5 | 5| 5 |f[5] |0 | 0 | 0| 4 | 4| 4 | 4| 4
|f[6] | 0 | 0 |3 | 3 | 3| 3 | 3|3| |f[7] | 0 | 2 | 2| 2| 2| 2 | 2|2 | |f[8] | 1 | 1 | 1| 1| 1| 1 | 1|1|

f[i]为第i个数字到最后一个数字的最长不上升子序列。

#include<bits/stdc++.h>
using namespace std;
int n=0;
int a[100005],f[100005];
int main(){while(scanf("%d",&a[++n])!=EOF);//输入方式--n;//注意,要n--int s=0;//拦截导弹数量for(int i=n;i>=1;i--) //从后往前算{f[i]=1;//初始第一个可以拦for(int j=i+1;j<=n;j++)//往n进行循环,计算i~n的最长不上升子序列if(a[i]>=a[j])//如果满足条件不上升{f[i]=max(f[i],f[j]+1);//注意,f[j]一定要+1,1为能拦截的第一个导弹即a[i]这发导弹。s=max(f[i],s);//求最大值}cout<<s;s=0;for(int i=n;i>=1;i--) //同上{f[i]=1;for(int j=i+1;j<=n;j++)if(a[i]<a[j])//因为是求最长不下降子序列{f[i]=max(f[i],f[j]+1);}s=max(f[i],s);}cout<<' '<<s;return 0;
}

 

这篇关于五一快乐加餐(动态规划)4题综合版(每日更新5.3已更)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292457

相关文章

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表