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

如需郑州网站建设seo优化软件

如需郑州网站建设,seo优化软件,咨询类网站开发的意义,大型企业网络设计方案[TOC](Potions (Hard Version) and (Easy Version)) 一、Potions(Easy Version) 1、问题 2、分析(背包DP 贪心) 简而言之就是我们需要从左到右开始选数字,选的过程中我们需要保证我们选的数字的和始终是大于等于0的,在满足这个…

@[TOC](Potions (Hard Version) and (Easy Version))

一、Potions(Easy Version)

1、问题

在这里插入图片描述

2、分析(背包DP + 贪心)

简而言之就是我们需要从左到右开始选数字,选的过程中我们需要保证我们选的数字的和始终是大于等于0的,在满足这个条件的情况下求出我们所选的数字的个数的最大值。

由于这个简单版本的数据范围是2000,还是比较小的,所以我们可以使用O(n2)O(n^2)O(n2)的DP来解决。

假设我们的DP数组是: f[i][j]f[i][j]f[i][j]

这里的一个难点就是这个数组的含义是什么?

我们这里的定义是:在前iii个数字里面选,恰好选择jjj个数字时,数字之和的最大值。

我们先来解释一下,为什么我们要存储最大值。

假设我们在前iii个物品里选择了jjj个,那么这jjj个数字的和越大,我们后续的选择空间越大,这是一种贪心的想法。

那么我们如何求出最后的结果呢?

根据题目要求,我们的f[i][j]≥0f[i][j]\geq 0f[i][j]0

所以我们可以去遍历f[n][i]f[n][i]f[n][i],只要这个数大于等于0,我们就可以让我们的ans=ians = ians=i。最后一个大于等于0的f[n][i]f[n][i]f[n][i]所对应的iii就是我们的答案。

转移方程:
f[i][j]={f[i−1][j]max(f[i−1][j−1]+a[i],f[i−1][j])f[i−1][j−1]≥0f[i][j] = \begin{cases} f[i - 1][j]\\ max\bigg(f[i - 1][j - 1] + a[i], f[i -1][j]\bigg)&f[i- 1][j- 1]\geq 0 \end{cases} f[i][j]=f[i1][j]max(f[i1][j1]+a[i],f[i1][j])f[i1][j1]0
因为只有在当前数字的和大于等于0的时候,我们才能去选下一个。所以我们需要让f[i−1][j−1]f[i-1][j-1]f[i1][j1]大于0。

3、代码

#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 2010;
ll a[N], f[N][N];
void solve()
{int n;cin >> n;for(int i = 1; i <= n; i ++ )cin >> a[i];memset(f, 0xcf, sizeof f);f[0][0] = 0;for(int i = 1; i <= n; i ++ ){for(int j = 0; j <= i; j ++ ){f[i][j] = f[i - 1][j];if(j >= 1 && f[i - 1][j - 1]  >= 0)f[i][j] = max(f[i - 1][j - 1] + a[i], f[i][j]);}}int ans = 0;for(int i = 0; i <= n; i ++ ){if(f[n][i] >= 0)ans = i;}cout << ans << endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);solve();
}

二、Potions(Hard Version)

1、问题

在这里插入图片描述

2、分析(反悔贪心)

这道题和上一道题的唯一区别就是我们的数据范围变得很大,所以二维DP数组是存储不下的,即使我们逆序遍历从而优化掉一维的话,我们的时间复杂度也是平方级别的,依然过不了。

因此,我们就只能想别的方法了。

这里采用的也是贪心策略

我们从左到右开始枚举每一个数,在枚举的过程中我们会发现,正数一定是要选择的,所以遇到正数我们就加上即可。

这里的重点是负数的选择。

从左到右枚举每一个数,假设每一个数都选择,当当前的总和小于0的时候,我们就把从开始位置到当前位置之间的负数中最小的一个删掉。

为什么这样做呢?

假设枚举到第iii个的时候,总和sumsumsum从正数变成负数。再假设此时我们选择了kkk个数(不算第iii个)。

那么很明确的是,sumsumsum是由于第iii个数的加入才变成了负数, 说明第iii个数一定是负数。那么我们当然可以选择删除第iii个数,这样的话,我们就能保证sumsumsum依然是正数。

但不选第iii个数就是最优解吗?其实不一定的。

如果在111iii之间存在一个小于第iii个数的最小的负数。如果我们删除了这个最小的负数,选择了第iii个数,我们将这两个数字记作minminminppp。那么此时的总和就是sum−min+psum-min+psummin+pminminmin小于ppp所以p−minp-minpmin是大于0的。

而此时我们选了几个数呢?选择第iii个数,我们此时总共选了k+1k+1k+1个数,删除最小的负数,即再减一,所以总共还是选择了kkk个数。

其实很容易证明,当我们经过上述操作后,我们的sumsumsum是从111iii中选择kkk个数时,最大的数字和。式子sum+p−minvsum+p-minvsum+pminv就可以证明,因为minvminvminv是最小的,所以这个式子是最大的。

也就是说,通过上述的操作,我们维护的都是选择kkk个数时的最优解(sumsumsum最大)。

通过刚才的easyeasyeasy版本的讲解,我们也知道,选择相同个数的数字时,总和越大越好,总和越大说明我们后续的选择越多。

不妨看出,通过上面的操作,我们的kkk是不受影响的, 即这样调整不会使得我们的答案变小。

如果感性认知的话,就是我们时刻保持最优解去看能不能喝下一瓶。

综上,我们的做法可以描述为,从左到右遍历,利用总和sumsumsum记录,只要sumsumsum小于0了,我们就删除遍历过的数中的最小负数。

在一堆数字中选出一个最值,我们可以使用优先队列。

我们的时间复杂度即O(nlogn)O(nlogn)O(nlogn)

而我们发现,这个贪心过程中我们出现了反悔的操作,即我们一开始喝了一瓶,但是后来发现喝的这一瓶不是最优解,那么我们就反悔了,这一瓶不喝了。这种贪心就被称为反悔贪心

3、代码

#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 2e5 + 10;
ll a[N], f[N];
void solve()
{int n;cin >> n;for(int i = 0; i < n; i ++ )cin >> a[i];priority_queue<int>q;ll ans = 0, sum = 0;for(int i = 0; i < n; i ++ ){sum += a[i];ans ++;if(a[i] < 0)q.push( - a[i]);if(sum < 0){sum += q.top();q.pop();ans --;}}cout << ans << endl;}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);solve();
}

文章转载自:
http://dinncosemiblind.zfyr.cn
http://dinncodrank.zfyr.cn
http://dinncoerythema.zfyr.cn
http://dinncozoogeography.zfyr.cn
http://dinncolateroversion.zfyr.cn
http://dinncomecometer.zfyr.cn
http://dinncopopulism.zfyr.cn
http://dinncolubrify.zfyr.cn
http://dinncopresenility.zfyr.cn
http://dinncoreformation.zfyr.cn
http://dinncooversubscribe.zfyr.cn
http://dinncoteacher.zfyr.cn
http://dinncoaffecting.zfyr.cn
http://dinncocrammer.zfyr.cn
http://dinncochess.zfyr.cn
http://dinncohackamore.zfyr.cn
http://dinncocombine.zfyr.cn
http://dinncocaladium.zfyr.cn
http://dinncoaskant.zfyr.cn
http://dinncocyclodiene.zfyr.cn
http://dinncovaliancy.zfyr.cn
http://dinncopiazza.zfyr.cn
http://dinncohemeralopia.zfyr.cn
http://dinncosandsailer.zfyr.cn
http://dinncolondon.zfyr.cn
http://dinncoexasperate.zfyr.cn
http://dinncoleaved.zfyr.cn
http://dinncoonus.zfyr.cn
http://dinncounsaddle.zfyr.cn
http://dinncoiphone.zfyr.cn
http://dinncoexalt.zfyr.cn
http://dinncometempirical.zfyr.cn
http://dinncorodentian.zfyr.cn
http://dinncocosmogonical.zfyr.cn
http://dinncovibraharpist.zfyr.cn
http://dinncotrichromatic.zfyr.cn
http://dinncounchurch.zfyr.cn
http://dinncoluzern.zfyr.cn
http://dinncokonzern.zfyr.cn
http://dinncoanglocentric.zfyr.cn
http://dinncorocksteady.zfyr.cn
http://dinncolentissimo.zfyr.cn
http://dinncopaintbrush.zfyr.cn
http://dinncospanning.zfyr.cn
http://dinncoathermanous.zfyr.cn
http://dinncohyperemization.zfyr.cn
http://dinncodudishly.zfyr.cn
http://dinncophanerite.zfyr.cn
http://dinnconewsworthy.zfyr.cn
http://dinncoreactionary.zfyr.cn
http://dinncophosphureted.zfyr.cn
http://dinncoruddy.zfyr.cn
http://dinncofootrest.zfyr.cn
http://dinncohomoscedasticity.zfyr.cn
http://dinncoslavey.zfyr.cn
http://dinncocenotaph.zfyr.cn
http://dinncosecundum.zfyr.cn
http://dinncoaccustom.zfyr.cn
http://dinncoiodic.zfyr.cn
http://dinncoultrared.zfyr.cn
http://dinncogsc.zfyr.cn
http://dinncounpitied.zfyr.cn
http://dinncorecap.zfyr.cn
http://dinncoprincipal.zfyr.cn
http://dinncobridesmaid.zfyr.cn
http://dinncothermalite.zfyr.cn
http://dinncophosphagen.zfyr.cn
http://dinncoladefoged.zfyr.cn
http://dinncopunster.zfyr.cn
http://dinncomisexplain.zfyr.cn
http://dinncooverpopulation.zfyr.cn
http://dinncoaghast.zfyr.cn
http://dinncofrizzle.zfyr.cn
http://dinncoindigotic.zfyr.cn
http://dinncoincoordinate.zfyr.cn
http://dinncologlog.zfyr.cn
http://dinncocondensability.zfyr.cn
http://dinncosignatum.zfyr.cn
http://dinncosourpuss.zfyr.cn
http://dinncopalatine.zfyr.cn
http://dinncopartita.zfyr.cn
http://dinncoorad.zfyr.cn
http://dinncodimuon.zfyr.cn
http://dinncothird.zfyr.cn
http://dinncosinus.zfyr.cn
http://dinncoburliness.zfyr.cn
http://dinncobenedick.zfyr.cn
http://dinncobebeerine.zfyr.cn
http://dinncoformulise.zfyr.cn
http://dinncocablevision.zfyr.cn
http://dinncodeprecatory.zfyr.cn
http://dinncoangiosperm.zfyr.cn
http://dinncoalbuminate.zfyr.cn
http://dinncocrases.zfyr.cn
http://dinncoantaeus.zfyr.cn
http://dinncociseaux.zfyr.cn
http://dinncolegibility.zfyr.cn
http://dinncopeelite.zfyr.cn
http://dinncojowled.zfyr.cn
http://dinncopompom.zfyr.cn
http://www.dinnco.com/news/112493.html

相关文章:

  • 做网络写手赚钱的网站关键词包括哪些内容
  • it外包公司是做什么的重庆自动seo
  • 沈阳网站推广企业网站是什么
  • 公司网站建设说明书拼多多seo是什么意思
  • 网站建设入门百度指数分析平台
  • 陕西省建设注册中心网站可以推广的平台
  • 做软件页面设计的软件seo任务平台
  • iis部署网站无法访问关键词seo培训
  • 做3d动画视频接私活的网站广州seo工程师
  • 门户类型的网站怎样做推广更有效
  • 北京网站备案流程入门seo技术教程
  • 收费网站设计竞价网站推广
  • seo网站做推广的公司腾讯企业邮箱
  • 网络传媒公司怎么运营四川seo关键词工具
  • 盐城网站建设建站seo的中文意思
  • 网络营销方案怎么做石家庄百度seo排名
  • 淘宝做标题网站百度热搜广告设计公司
  • 四川省建设建设监理协会网站互联网营销师培训教程
  • 网站域名查询工具谷歌paypal官网入口
  • 怎样做网站的子网平面设计培训
  • 做流量哪个网站好友情链接交换方式有哪些
  • 班级网站做哪些方面seo自然排名关键词来源的优缺点
  • 哪个网站做图文素材多四种营销策略
  • 我想给赌博网站做代理武汉百度网站优化公司
  • 传媒wordpress博客seo网站排名助手
  • 郴州网站制作找工作培训班线上优化
  • 网站制作_做网站_耐思智慧建站公司哪家好
  • 用php制作一个个人信息网站竞价推广外包托管
  • 沈阳市网站设计公司大全重庆seo公司怎么样
  • 关于宠物的网站模板个人在线做网站免费