2.2学习总结

2.2
1.⼀和零
2.零钱兑换II
3.组合总和 Ⅳ
4.零钱兑换
5.完全平⽅数
6.封印
7.杨辉三角形
8.卡牌
9.最大子段和

题1:https://leetcode.cn/problems/ones-and-zeroes/description/

01背包问题,其中m,n分别是背包的容量,s字符串中的子串是物品的数量,字符串的个数相当于物品的价值,找最大的字符串个数

定义:dp[i][j]最多有i个0和j个1的strs的最⼤⼦集的⼤⼩为dp[i][j]。

确定递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);

初始化:由于是找个数,所以都初始化为0

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {int dp[101][101];memset(dp,0,sizeof(dp));for (string str:strs){int zeronum=0,onenum=0;for (char c:str){if (c=='0')zeronum++;else onenum++;}for (int i=m;i>=zeronum;--i){for (int j=n;j>=onenum;--j){dp[i][j]=max(dp[i][j],dp[i-zeronum][j-onenum]+1);}}}return dp[m][n];}
};

题2:https://leetcode.cn/problems/coin-change-ii/

由于可以无限拿,所以是完全背包问题

问的是组合数,那么是强调顺序了,所以需要先遍历物品在遍历背包容量

定义dp[j]:凑成总⾦额j的货币组合数为dp[j]

递推公式:dp[j] += dp[j - coins[i]];

初始化:dp[0] = 1,因为如果为0的话后面的数都0,这就也相当于,当凑总金额为0的情况有1种

class Solution {
public:int change(int amount, vector<int>& coins) {vector<int>dp(amount+1,0);dp[0]=1;    //初始化for (int i=0;i<coins.size();++i){for (int j=coins[i];j<=amount;++j){dp[j]+=dp[j-coins[i]];  //dp[j] 就是所有的dp[j - coins[i]](考虑coins[i]的情况)相加}}return dp[amount];}
};

题3:https://leetcode.cn/problems/combination-sum-iv/

这题找的排列数,所以不在乎顺序,所以需要先遍历背包容量,在遍历物品

dp[i]: 凑成⽬标正整数为i的排列个数为dp[i]

dp[i] += dp[i - nums[j]];

由于是找次数所以,dp[0]要初始化为1

class Solution {public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target + 1, 0);dp[0] = 1;for (int i = 0; i <= target; i++) { // 遍历背包for (int j = 0; j < nums.size(); j++) { // 遍历物品if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {dp[i] += dp[i - nums[j]];}}}return dp[target];}
};

题4:https://leetcode.cn/problems/coin-change/

这题不是找成功的个数了,变成兑换成功的最小个数,所以转移方程就要发生改变

dp[j]:凑⾜总额为j所需钱币的最少个数为dp[j]

dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

由于当金额为0的时候,所需的钱一定是0,所以dp[0] = 0;

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int>dp(amount+1,INT_MAX);dp[0]=0;for (int i=0;i<coins.size();++i){for (int j=coins[i];j<=amount;++j){if (dp[j-coins[i]]!=INT_MAX)dp[j]=min(dp[j],dp[j-coins[i]]+1);}}if (dp[amount]==INT_MAX) return -1;return dp[amount];}
};

题5:https://leetcode.cn/problems/perfect-squares/

dp[j]:和为j的完全平⽅数的最少数量为dp[j]

dp[j] = min(dp[j - i * i] + 1, dp[j]);

当j为0的时候,最小平方数的数量一定是0,所以dp[0]⼀定是0

class Solution {
public:int numSquares(int n) {vector<int>pp(101,0);for (int i=1;i<=100;++i)pp[i]=i*i;vector<int>dp(n+1,INT_MAX);dp[0]=0;for (int i=1;i*i<=n;++i){for (int j=pp[i];j<=n;++j){if (dp[j-pp[i]]!=INT_MAX)dp[j]=min(dp[j],dp[j-pp[i]]+1);}}return dp[n];}
};

题7:封印https://www.luogu.com.cn/problem/P1934

题目背景

很久以前,魔界大旱,水井全部干涸,温度也越来越高。为了拯救居民,夜叉族国王龙溟希望能打破神魔之井,进入人界“窃取”水灵珠,以修复大地水脉。可是六界之间皆有封印,神魔之井的封印由蜀山控制,并施有封印。龙溟作为魔界王族,习有穿行之术,可任意穿行至任何留有空隙的位置。然而封印不留有任何空隙! 龙溟无奈之下只能强行破除封印。破除封印必然消耗一定的元气。为了寻找水灵珠,龙溟必须减少体力消耗。他可以在破除封印的同时使用越行术。

题目描述

神魔之井的封印共有 �n 层,每层封印都有一个坚固值。身为魔族的龙溟单独打破一层封印时需要消耗的元气为该层封印的坚固值和封印总层数 �n 的平方的乘积; 但他也可以打破第 i 层到第 j 层之间的所有封印( �<�i<j),总元气消耗为第 �,�i,j 层封印的坚固值之和与第 �,�i,j 层之间所有封印层(包括第 �,�i,j 层)的坚固值之和的乘积,但为了不惊动蜀山,第 �,�i,j 层封印的坚固值之和不能大于 �t (单独打破可以不遵守)。

输入格式

第一行包含两个正整数 �n 和 �t。
第二行有 �n 个正整数,第 �i 个数为 ��ai​,表示第 �i 层封印的坚固值。

输出格式

仅一行,包含一个正整数,表示最小消耗元气。

输入输出样例

输入 #1复制

6 10
8 5 7 9 3 5

输出 #1复制

578

说明/提示

样例解释

先单独打破第一层,再用越行术从第二层直接打破到最后一层。 这样消耗元气 8×62+(5+5)×(5+7+9+3+5)=5788×62+(5+5)×(5+7+9+3+5)=578。

数据范围

对于 10%10% 的数据, �≤10n≤10;
对于 50%50% 的数据, �≤100n≤100;
对于 70%70% 的数据, �≤500n≤500;
对于 100%100% 的数据, �≤1000n≤1000, ��(1≤�≤�),�≤20000ai​(1≤i≤n),t≤20000。

思路:当前状态的结果是由前一个状态转移来的

分为两种情况:单独破,或者多层一起破,找两种情况的最小值

转移方程如下:dp[i]=min(dp[i-1]+a[i]*n*n,dp[j-1]+(a[i]+a[j])*(f[i]-f[j-1]))

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long 
const int N=2e5+5;
int dp[N],a[N],f[N];
signed main(){int n,t;cin>>n>>t;for (int i=1;i<=n;++i)cin>>a[i];for (int i=1;i<=n;++i)f[i]=f[i-1]+a[i];int m=n*n;for (int i=1;i<=n;++i){int ans=dp[i-1]+a[i]*m;for (int j=1;j<=i-1;++j){if (a[i]+a[j]>t) continue;else ans=min(ans,dp[j-1]+(a[i]+a[j])*(f[i]-f[j-1]));}dp[i]=ans;}cout<<dp[n];
}

题8:杨辉三角形https://www.luogu.com.cn/problem/P8749

题目描述

下面的图形是著名的杨辉三角形:

思路:找到杨辉三角里面值和位置的关系,然后二分找

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long 
int n;
int C(int x,int y){int res=1;for (int i=x,j=1;j<=y;++j,--i){res=res*i/j;if (res>n)return res;}return res;
}
signed main(){cin>>n;if (n==1){cout<<1;return 0;}for (int i=16;i>=0;--i){int l=2*i,r=1e9;while (l<=r){int mid=l+(r-l)/2;int x=C(mid,i);if (x==n){printf("%lld",(mid+1)*mid/2+i+1);return 0;}else if (x<n)l=mid+1;else if (x>n)r=mid-1;}}return 0;
}

题9:卡牌https://www.luogu.com.cn/problem/P8800

题目描述

这天,小明在整理他的卡牌。

他一共有 �n 种卡牌,第 �i 种卡牌上印有正整数数 �(�∈[1,�])i(i∈[1,n]), 且第 �i 种卡牌现有 ��ai​ 张。

而如果有 �n 张卡牌,其中每种卡牌各一张,那么这 �n 张卡牌可以被称为一套牌。小明为了凑出尽可能多套牌,拿出了 �m 张空白牌, 他可以在上面写上数 �i,将其当做第 �i 种牌来凑出套牌。然而小明觉得手写的牌不太美观,决定第 �i 种牌最多手写 ��bi​ 张。

请问小明最多能凑出多少套牌?

输入格式

输入共 3 行,第一行为两个正整数 �n,�m 。

第二行为 �n 个正整数 �1,�2,…,��a1​,a2​,…,an​ 。

第三行为 �n 个正整数 �1,�2,…,��b1​,b2​,…,bn​ 。

输出格式

一行,一个整数表示答案。

输入输出样例

输入 #1复制

4 5
1 2 3 4
5 5 5 5

输出 #1复制

3

说明/提示

【样例说明】

这 55 张空白牌中,拿 22 张写 11,拿 11 张写 22,这样每种牌的牌数就变为了 3,3,3,43,3,3,4,可以凑出 33 套牌,剩下 22 张空白牌不能再帮助小明凑出一套。

【评测用例规模与约定】

对于 30%30% 的数据,保证 �≤2000n≤2000;

对于 100%100% 的数据,保证 �≤2×105;��,��≤�;�≤�2n≤2×105;ai​,bi​≤n;m≤n2 。

思路:主要还是用二分,假定最终有x副牌,然后根据x去找每种牌,如果超过了给牌范围就返回不行,或者说如果总数超过了给牌范围也返回不行

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long 
const int N=2e5+5;
int a[N],b[N],m,n,l=0,r=1e7+5;
bool check(int x){	//可以形成x副牌 int sum=0;for (int i=0;i<n;++i){if (x-a[i]>b[i])return false;sum+=max(x-a[i],0LL);}if (sum<=m)return true;else return false;
}
int solve(){while (l<r){int mid=l+(r-l)/2;if (check(mid)){l=mid+1;}else {r=mid;}}if (check(r))return r;else return l;
}
signed main(){cin>>n>>m;for (int i=0;i<n;++i)cin>>a[i];for (int i=0;i<n;++i)cin>>b[i];cout<<solve()-1;
}

题10:最大子段和https://www.luogu.com.cn/problem/P1115

题目描述

给出一个长度为 �n 的序列 �a,选出其中连续且非空的一段使得这段和最大。

输入格式

第一行是一个整数,表示序列的长度 �n。

第二行有 �n 个整数,第 �i 个整数表示序列的第 �i 个数字 ��ai​。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1复制

7
2 -4 3 -1 2 -4 3

输出 #1复制

4

说明/提示

样例 1 解释

选取 [3,5][3,5] 子段 {3,−1,2}{3,−1,2},其和为 44。

数据规模与约定
  • 对于 40%40% 的数据,保证 �≤2×103n≤2×103。
  • 对于 100%100% 的数据,保证 1≤�≤2×1051≤n≤2×105,−104≤��≤104−104≤ai​≤104。

思路:动态规划,遍历一遍数组,找到最大的连续子段和,然后再遍历一遍dp数组,找到最大值

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x& - (x))
#define int long long 
const int N=2e5+5;
int dp[N],a[N];
signed main(){int n;cin>>n;for (int i=1;i<=n;++i)cin>>a[i];dp[1]=a[1];int maxn=dp[1];for (int i=1;i<=n;++i){dp[i]=max(dp[i-1]+a[i],a[i]);if (dp[i]>maxn)maxn=dp[i];}cout<<maxn;
}

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

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

相关文章

力扣hot100 二叉树的右视图 DFS BFS 层序遍历 递归

Problem: 199. 二叉树的右视图 文章目录 思路&#x1f496; BFS&#x1f496; DFS 思路 &#x1f469;‍&#x1f3eb; 甜姨 &#x1f496; BFS ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public List<Integer&…

NFT Insider #119:The Sandbox 举办VoxEdit 战士装备设计比赛,周星驰 Nobody NFT开启铸造

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

【Android】高仿京东三级类型列表Demo

本demo基于二级分类双列表联动Demo进行了改进&#xff0c;高仿实现了京东的三级类型列表。 京东的如图&#xff1a; 本demo的&#xff1a; 改进之处 实现了三级列表联动&#xff0c;二三级列表之间的滑动监听优化了一下&#xff0c;将二级类型选中交予自身的点击事件&#…

IDEA如何进行远程Debug调试

背景&#xff1a; 使用docker进行CVE漏洞复现的时候&#xff0c;由于只能黑盒进行复现&#xff0c;并不能知道为什么会产生这个漏洞&#xff0c;以及漏洞的POC为什么要这么写&#xff0c;之前我都是通过本地debug来进行源码分析&#xff0c;后来搜了一下&#xff0c;发现可以进…

day36 无重叠区间 划分字母区间 合并区间

题目1&#xff1a;435 无重叠区间 题目链接&#xff1a;435 无重叠区间 题意 intervals[i][starti&#xff0c;endi] 移除区间&#xff0c;使得区间互不重叠&#xff0c;返回移除区间的最小数量 相邻区间挨在一起&#xff0c;尽量移除重叠区间 代码 class Solution { publ…

HCIP-Datacom(H12-821)81-90题解析

有需要完整题库的同学可以私信博主&#xff0c;博主看到会回复将文件发给你&#xff01;&#xff08;麻烦各位同学给博主推文点赞关注和收藏哦&#xff09; 81、在状态检测防火墙中&#xff0c;开启状态检测机制时&#xff0c;三次握手的第二个报文(SYNACK)到达防火墙的时候如…

Qt实现窗口吸附屏幕边缘 自动收缩

先看效果&#xff1a; N年前的QQ就可以吸附到屏幕边缘&#xff0c;聊天时候非常方便&#xff0c;不用点击状态栏图标即可呼出QQ界面 自己尝试做了一个糙版的屏幕吸附效果。 关键代码&#xff1a; void Widget::mouseMoveEvent(QMouseEvent *e) {int dx e->globalX() - l…

户外没有电源和网络,但需要安装监控系统,怎么办?太阳能智能监控系统给你解决

近期有粉丝给小编求助&#xff1a;需要在没网没电的户外进行智能监控的安装&#xff0c;不知道如何解决。收到粉丝的问题&#xff0c;小编立刻联系了技术人员给出方案。针对野外、户外等场景只需使用太阳能供电模组4G摄像机视频监控EasyCVR平台智能分析网关V4的架构&#xff0c…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树

文章目录 第5章 决策树5.1 决策树模型与学习5.1.1 决策树模型5.1.2 决策树与if-then规则5.1.3 决策树与条件概率分布5.1.4 决策树学习5.2 特征选择5.2.1 特征选择问题5.2.2 信息增益5.2.3 信息增益比5.3.1 ID3算法5.3.2 C4.5的生成算法5.4 决策树的剪枝5.5 CART算法5.5.1 CART生…

20240202在Ubuntu20.04.6下使用whisper.cpp的CPU模式

20240202在Ubuntu20.04.6下使用whisper.cpp的CPU模式 2024/2/2 14:15 rootrootrootroot-X99-Turbo:~/whisper.cpp$ ./main -l zh -osrt -m models/ggml-medium.bin chs.wav 在纯CPU模式下&#xff0c;使用medium中等模型&#xff0c;7分钟的中文视频需要851829.69 ms&#xf…

常见的图形化编程工具都有什么

图形化编程是一种通过可视化界面和模块化组件来进行程序设计的方法&#xff0c;它使得编程更加直观和易于理解&#xff0c;尤其适合初学者和儿童学习编程。在这篇文章中&#xff0c;6547网题库将介绍图形化编程的基本概念、优势以及一些常见的图形化编程工具。 一、图形化编程的…

CAD-autolisp(三)——文件、对话框

目录 一、文件操作1.1 写文件1.2 读文件 二、对话框DCL2.1 初识对话框2.2 常用对话框界面2.2.1 复选框、列表框2.2.2 下拉框2.2.3 文字输入框、单选点框 2.3 Lisp对dcl的驱动2.4 对话框按钮实现拾取2.5 对话框加载图片2.5.1 幻灯片图片制作2.5.1 代码部分 一、文件操作 1.1 写…

密钥加密问题

C参考代码&#xff1a; #include<iostream> #include<map> #include<vector> using namespace std; int main() {vector<char> x;vector<char> y;map<char,char> word;char ch getchar();getchar();string str;getline(cin,str);for(cha…

GmSSL - GmSSL的编译、安装和命令行基本指令

文章目录 Pre下载源代码(zip)编译与安装SM4加密解密SM3摘要SM2签名及验签SM2加密及解密生成SM2根证书rootcakey.pem及CA证书cakey.pem使用CA证书签发签名证书和加密证书将签名证书和ca证书合并为服务端证书certs.pem&#xff0c;并验证查看证书内容&#xff1a; Pre Java - 一…

JDK版本如何在IDEA中切换

JDK版本在IDEA中切换 一、项目结构设置 1.Platform——Settings 项目结构---SDKS 2.Project——SDK 3.Modules——SDK——Sources 4.Modules——SDK——Dependencies 二、设置--编译--字节码版本 Settings——Build,——Java Compiler

【Servlet】——Servlet API 详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、HttpServlet二、Htt…

spring boot yaml文件中如何设置duration对象值

Spring Boot对表示持续时间有专门的支持。如果您公开java.time.Duration属性&#xff0c;则应用程序对应Duration类型的属性有以下格式可用: long类型的常规表示(使用毫秒作为默认单位&#xff0c;除非指定了DurationUnit)java.time.Duration 使用的标准ISO-8601格式其中值和单…

鸿蒙ArkUI日期选择组件

鸿蒙ArkUI日期选择组件&#xff0c;基于基础组件进行的二次封装的日期选择组件&#xff0c;快速实现日期选择。 /*** 日期*/ Component export default struct DiygwDate{//绑定的值Link Watch(onValue) value:string;// 隐藏值State valueField: string value;// 显示值Sta…

6+单基因+单细胞+实验,干湿结合是生信分析发文最真诚的必杀技

今天给同学们分享一篇生信文章“CXCR4 expression is associated with proneural-to-mesenchymal transition in glioblastoma”&#xff0c;这篇文章发表在Int J Cancer期刊上&#xff0c;影响因子为6.4。 结果解读&#xff1a; CXCR4表达与PN GBM的存活和MES标记物的表达相关…

Echarts+Vue 首页大屏静态示例Demo 第三版

效果图: 源码: <template><div class="content bg" style="height: 100vh;overflow-y: auto" :class="{ fullscreen-container: isFullScreen }"><div class="reaDiv" style="height: 10vh"><div…