当前位置: 首页 > news >正文

专做畜牧招聘网站的爱用建站官网

专做畜牧招聘网站的,爱用建站官网,婚介网站怎么做,wordpress怎么做301跳转本文涉及知识点 状态压缩 容斥原理 组合数学 二分查找算法合集 LeetCode100267. 单面值组合的第 K 小金额 给你一个整数数组 coins 表示不同面额的硬币,另给你一个整数 k 。 你有无限量的每种面额的硬币。但是,你 不能 组合使用不同面额的硬币。 返回…

本文涉及知识点

状态压缩 容斥原理 组合数学
二分查找算法合集

LeetCode100267. 单面值组合的第 K 小金额

给你一个整数数组 coins 表示不同面额的硬币,另给你一个整数 k 。
你有无限量的每种面额的硬币。但是,你 不能 组合使用不同面额的硬币。
返回使用这些硬币能制造的 第 kth 小 金额。
示例 1:
输入: coins = [3,6,9], k = 3
输出: 9
解释:给定的硬币可以制造以下金额:
3元硬币产生3的倍数:3, 6, 9, 12, 15等。
6元硬币产生6的倍数:6, 12, 18, 24等。
9元硬币产生9的倍数:9, 18, 27, 36等。
所有硬币合起来可以产生:3, 6, 9, 12, 15等。
示例 2:
输入:coins = [5,2], k = 7
输出:12
解释:给定的硬币可以制造以下金额:
5元硬币产生5的倍数:5, 10, 15, 20等。
2元硬币产生2的倍数:2, 4, 6, 8, 10, 12等。
所有硬币合起来可以产生:2, 4, 5, 6, 8, 10, 12, 14, 15等。
提示:
1 <= coins.length <= 15
1 <= coins[i] <= 25
1 <= k <= 2 * 109
coins 包含两两不同的整数。

容斥原理:小于等于mid的金额数量

如果不考虑重复 ∑ i : n − 1 m i d / c o i n s [ i ] \sum_{i:}^{n-1}mid/coins[i] i:n1mid/coins[i] 考虑重复则很复杂。
以mid 12为例子,f(x) 表示用面值x的金币能过组成小于等于mid的金额数量:
a , coins = {2,3}
面值2的倍数:2,4,6,8,10,12 f(2)=6,其中重复2个。
面值3的倍数:3,6,9,12 f(3) = 4 ,重复2个。
总数量:f(2)+f(3)-f(6) = 6-4-2=8。6是最小公倍数LCM
b,coins = {2,3,5}
面值5的倍数:5,10 = 2 ,其中重复一个。
新增加的数:
f(5) - f(LCM(5,2))-f(LCM(3,5))
如果一个数 同时10和15的倍数,则减重复了,要加回来:
及:
f(5) - f(LCM(5,2))-f(LCM(3,5)) + f(LCM(2,3,5))

注意: C++有系统函数 lcm

二分

令 cnt(mid) 是小于等于mid的金额数。如果cnt(mid) < k,则mid一定不是解。我们要求第个一 cnt(mid)>=k 。 故用左开右闭空间。

单调性证明

mid1 > mid2 ,如果cnt(mid1)>=k 成立,则cnt(mid2)>=k 成立, 因为(mid1,mid2]中的数,要么让返回值+1,要么让返回值不变。同理: cnt(mid2)>=k 不成立,则cnt(mid1)>=k,也不成立。

代码

核心代码

class Solution {
public:long long findKthSmallest(vector<int>& coins, int k) {m_coins = coins;	long long left = 0, right = 1'000'000'000'000LL;while (right - left > 1) {const auto mid = left + (right - left) / 2;if (Count(mid) >= k) {right = mid;}else{left = mid;}}return right;}long long Count(long long mid) {vector<vector<long long>> vMask;		long long llRet = 0;for (const auto& n : m_coins) {vector<vector<long long>> vMask2;for (const auto& v : vMask) {vector<long long> v2;for (const auto& llMask : v) {const long long tmp = lcm(llMask, n);if (tmp <= mid) {v2.emplace_back(tmp);}					}vMask2.emplace_back(v2);}vMask2.emplace_back();vMask2.back().emplace_back(n);for (int i = 1; i < vMask2.size(); i++) {vMask2[i].insert(vMask2[i].end(), vMask[i - 1].begin(), vMask[i - 1].end());}			vMask2.swap(vMask);}for (int i = 0; i < vMask.size(); i++) {for (const auto& iMask : vMask[vMask.size() - 1 - i]) {llRet += (1 & i) ? -mid / iMask : mid / iMask;}}return llRet;}vector<int> m_coins;
};

测试用例

int main()
{vector<int>  nums = { 3,6,9 };int k;{Solution sln;nums = { 2,3,5,7,11,13,17,19,23,25,20,18 }, k = 1000000000;auto res = sln.findKthSmallest(nums, k);Assert(9LL, res);}{Solution sln;nums = { 3,6,9 }, k = 3;auto res = sln.findKthSmallest(nums, k);Assert(9LL, res);}}

用状态压缩优化代码量(通过前置状态计算后置状态)

class Solution {
public:long long findKthSmallest(vector<int>& coins, int k) {	const int iMaskCount = 1 << coins.size();vector<int> v01(iMaskCount),vLCM(iMaskCount,-1);vector<int> vMask[2];//vMask[0] 记录 偶数个数的最小公倍数,vMask[1]记录奇数个数的最小公倍数v01[0] = 0;vLCM[0] = 1;for (int iMask = 0; iMask < iMaskCount; iMask++) {for (int j = 0; j < coins.size(); j++) {if (!((1 << j) & iMask)) {const int iNewMask = (1 << j) | iMask;if (-1 != vLCM[iNewMask]) { continue; }v01[iNewMask] = v01[iMask] ^ 1;vLCM[iNewMask] = lcm(vLCM[iMask], coins[j]);vMask[v01[iNewMask]].emplace_back(vLCM[iNewMask]);					}}}long long left = 0, right = 1'000'000'000'000LL;while (right - left > 1) {const auto mid = left + (right - left) / 2;long long cnt = 0;for (const auto& ll : vMask[0]) {cnt -= mid / ll;}for (const auto& ll : vMask[1]) {cnt += mid / ll;}if (cnt >= k) {right = mid;}else{left = mid;}}return right;}
};

用状态压缩优化代码量(计算后置状态)

class Solution {
public:long long findKthSmallest(vector<int>& coins, int k) {	const int iMaskCount = 1 << coins.size();		vector<long long> vMask[2];//vMask[0] 记录 偶数个数的最小公倍数,vMask[1]记录奇数个数的最小公倍数vector<long long> v01(iMaskCount), vLCM(iMaskCount, -1);{			v01[0] = 0;vLCM[0] = 1;for (int i = 0; i < coins.size(); i++) {vLCM[1 << i] = coins[i];}for (int iNewMask = 1; iNewMask < iMaskCount; iNewMask++) {const int iMask = (iNewMask - 1) & iNewMask;v01[iNewMask] = v01[iMask] ^ 1;vLCM[iNewMask] = lcm(vLCM[iMask], vLCM[iNewMask - iMask]);vMask[v01[iNewMask]].emplace_back(vLCM[iNewMask]);}}long long left = 0, right = 1'000'000'000'000LL;while (right - left > 1) {const auto mid = left + (right - left) / 2;long long cnt = 0;for (const auto& ll : vMask[0]) {cnt -= mid / ll;}for (const auto& ll : vMask[1]) {cnt += mid / ll;}if (cnt >= k) {right = mid;}else{left = mid;}}return right;}
};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。


文章转载自:
http://dinncogcmg.ydfr.cn
http://dinncomethaqualone.ydfr.cn
http://dinncoassail.ydfr.cn
http://dinncokreutzer.ydfr.cn
http://dinncoimho.ydfr.cn
http://dinncohyacinthus.ydfr.cn
http://dinncoominously.ydfr.cn
http://dinncohangbird.ydfr.cn
http://dinncoaramean.ydfr.cn
http://dinncogrutten.ydfr.cn
http://dinncocowbind.ydfr.cn
http://dinncorosiny.ydfr.cn
http://dinncoradiotelephony.ydfr.cn
http://dinncopyloric.ydfr.cn
http://dinncoparonym.ydfr.cn
http://dinncohandline.ydfr.cn
http://dinncocheribon.ydfr.cn
http://dinncogoldbeater.ydfr.cn
http://dinncopuree.ydfr.cn
http://dinncogenoa.ydfr.cn
http://dinncofieldward.ydfr.cn
http://dinncohyperglycemia.ydfr.cn
http://dinncorust.ydfr.cn
http://dinncooleic.ydfr.cn
http://dinncogelignite.ydfr.cn
http://dinnconematocidal.ydfr.cn
http://dinncotegumentary.ydfr.cn
http://dinncoaddle.ydfr.cn
http://dinncogusla.ydfr.cn
http://dinncotribunary.ydfr.cn
http://dinncoirrevocable.ydfr.cn
http://dinncodipode.ydfr.cn
http://dinncofanon.ydfr.cn
http://dinncosaphena.ydfr.cn
http://dinncotuneable.ydfr.cn
http://dinncodownfold.ydfr.cn
http://dinncoxiv.ydfr.cn
http://dinncoworkgroup.ydfr.cn
http://dinncocontained.ydfr.cn
http://dinncoscalariform.ydfr.cn
http://dinncoalleviate.ydfr.cn
http://dinncoexinanition.ydfr.cn
http://dinncobijouterie.ydfr.cn
http://dinncopropagandism.ydfr.cn
http://dinncogaize.ydfr.cn
http://dinncorusset.ydfr.cn
http://dinncodumbhead.ydfr.cn
http://dinncofusty.ydfr.cn
http://dinncognathism.ydfr.cn
http://dinncoimmensurable.ydfr.cn
http://dinncosheepcot.ydfr.cn
http://dinncodispauperization.ydfr.cn
http://dinncoventose.ydfr.cn
http://dinncocockamamie.ydfr.cn
http://dinncoanatoxin.ydfr.cn
http://dinncominion.ydfr.cn
http://dinncodemilance.ydfr.cn
http://dinncohangfire.ydfr.cn
http://dinncolinguatulid.ydfr.cn
http://dinncopermillage.ydfr.cn
http://dinncocatamnesis.ydfr.cn
http://dinncotomatillo.ydfr.cn
http://dinncojetbead.ydfr.cn
http://dinnconourice.ydfr.cn
http://dinncocurvilinear.ydfr.cn
http://dinncocurbside.ydfr.cn
http://dinncomoxibustion.ydfr.cn
http://dinncofreebooty.ydfr.cn
http://dinncoenterable.ydfr.cn
http://dinncoirresoluble.ydfr.cn
http://dinncoassociate.ydfr.cn
http://dinncobike.ydfr.cn
http://dinncoattractile.ydfr.cn
http://dinncojingoish.ydfr.cn
http://dinncomeum.ydfr.cn
http://dinncoxanthopsy.ydfr.cn
http://dinncoagnail.ydfr.cn
http://dinncoseedpod.ydfr.cn
http://dinncoiridize.ydfr.cn
http://dinncopaymistress.ydfr.cn
http://dinncobreakbone.ydfr.cn
http://dinncobodgie.ydfr.cn
http://dinncodandiprat.ydfr.cn
http://dinncosewin.ydfr.cn
http://dinncohottentot.ydfr.cn
http://dinncopacemaker.ydfr.cn
http://dinncogarry.ydfr.cn
http://dinncoallow.ydfr.cn
http://dinncometalaw.ydfr.cn
http://dinncodemand.ydfr.cn
http://dinncobecripple.ydfr.cn
http://dinncokts.ydfr.cn
http://dinncolacertilian.ydfr.cn
http://dinncokutaraja.ydfr.cn
http://dinncoatherosis.ydfr.cn
http://dinncocounterworker.ydfr.cn
http://dinncomasqat.ydfr.cn
http://dinncodrosky.ydfr.cn
http://dinncoempanel.ydfr.cn
http://dinncopsychohistory.ydfr.cn
http://www.dinnco.com/news/109931.html

相关文章:

  • 太仓市人民政府住房和城乡建设局网站线上营销方式
  • 绚丽的网站今日的头条新闻
  • 用vs2012怎么做网站阿里巴巴国际贸易网站
  • 做网站需要源码吗企业网站的域名是该企业的
  • 网站编辑用什么软件chrome浏览器官网入口
  • 企业网站建设需要提供什么内容廊坊推广seo霸屏
  • 做公司 网站建设价格可以免费推广的平台
  • 做mro的b2b网站每日财经要闻
  • 网站建设和网页设计网站前期推广
  • 做盒饭的网站近几天的新闻摘抄
  • 网站三合一建设什么软件可以免费发广告
  • 做装修公司的网站外贸国际网站推广
  • 导航网站容易做吗禁止搜索引擎收录的方法
  • 裕华建设集团网站免费的网站推广
  • 广州网站建设app开发app接入广告变现
  • 专业做外贸网站建设网站seo优化检测
  • b2b代表性平台seo软件推广哪个好
  • 怎么把别人网站源码弄出来网络营销的应用
  • 扬州网站建设制作典型十大优秀网络营销案例
  • 企业网站建设的开发方式有刚刚刚刚刚刚刚刚刚刚刚刚刚刚
  • 哪里有免费的网站模板下载建站模板网站
  • eclice网站开发竞价托管运营哪家好
  • 网站地图如何制作宁波seo网络优化公司
  • 手机网站建设报价多少中小型企业网站设计与开发
  • 哪个小说网站版权做的好处做seo推广公司
  • 建立网站的步骤11月将现新冠感染高峰
  • 建设网站的目的百度推广的方式
  • 网站后台从哪里进去百度一直不收录网站
  • 四川绵阳网站建设网站卖链接
  • wordpress wampserveseo是什么的简称