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

合肥网站开发培训学校seo优化技术厂家

合肥网站开发培训学校,seo优化技术厂家,建晨网站建设,星沙网站建设公司好久不见,甚是想念,最近一直在看过河这道题(感觉最近脑子有点宕机QAQ),现在算是有点懂了,打算记录下这道又爱又恨的题。(如有错误欢迎大佬帮忙指出) 话不多说,直接看题&…

好久不见,甚是想念,最近一直在看过河这道题(感觉最近脑子有点宕机QAQ),现在算是有点懂了,打算记录下这道又爱又恨的题。(如有错误欢迎大佬帮忙指出)

话不多说,直接看题:

类比分组背包,我们可以令f[i][j]表示前i个数能否组成j.

转移方程为:f[i][j]=f[i-1][j-x1^2]||f[i-1][j-x2^2]||....||f[i-1][j-xi^2]

现在我们考虑优化一下:

因为f[i][j]为bool类型,我们可以尝试用bitset优化一下。

我们每一行用bitset,然后用位运算实现(比正常平移优化约32倍)

f[i]=f[i-1]||f[i-1]<<(x[i]^2);(注意bitset最低位在最右边)

下面为AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
bitset<1000100> f[110];
int main(){cin>>n;f[0][0]=1;for(int i=1;i<=n;i++){int l,r;scanf("%d%d",&l,&r);for(int k=l;k<=r;k++){f[i]|=f[i-1]<<(k*k);}}cout<<f[n].count();
}

接题:

类似爬楼梯,我们记f[i]为到i时最少踩的个数。如果,f[i]上有石子,那么f[i]=min(f[i-j])+1(j>=s&&j<=t).然后一看范围,空间与时间都不允许。

我们应该还记得上次背包用map存的情况,这是因为空间上有大量的冗余。

而在这一题上,我们发现相比于桥,石子特别小,也说明他们间的距离非常大.

于是我们进行状态压缩。

从这开始就困了我蛮久(还是自己太菜了QAQ)

首先按照上述过程我们顺利过了30,我们不妨先用自己测试输出一下具体的样子。

我们发现如果两个石子距离十分大,从某一个位置开始,dp的值都一样。

比赛时,直接压缩成一个不超范围的直接提交(如果是我的话,就直接赋一个2024)

当然,虽然规律很明显,但对于有”强迫症“的我来说还是有点难以接受,于是我们从感性与严格证明的角度来论证正确性。

我们不妨自己先画个数轴,我们以6/7举例。

很显然,越到后面,每一段逐渐重合,然后就连续了,因为没有石子,假设某一段的dp值不同(假设有3个不同的值),那么到了后面,对于每一个点,他的状态势必是在<=3个的不同的值里选min的,而3个不同的值中势必有最小的一个,越到后面,除了最小的其他2个一定会在过程中慢慢被舍弃,最终收敛于最小的值(当然,可能有无法到达的)。

总结一下,当两个石子离得比较远,那在中间的这一段,其实就是在经过上一个石子的更新后去不断地筛选出min然后就不变了,而我们要做的就是把不变的一段删掉)

可能有点抽象,那么我们来严格证一下:

首先,我们得知道一个结论:

在离一点oS(S−1)的位置其每一点都可以到(等会证)

然后请看分析:

因此,我们推出一个结论:

在离一点oS(S−1)的位置其每一点都可以到并且他们的dp值都一样。

接下来,我们就得到了压缩方法:

如果两个石子距离>s(s-1),那么就把他变成s(s-1),这样就可以顺利通过了(注意,虽然这样石子后面的几个位置可能不准确,但是不妨碍求min的正确性,保险一点,可以再多空格,这样子每一个点的dp都是对的了)。

下面是对那个数学结论的证明:

我看网上很多是用Bezout's identity来证,我在这采用比较直观的方法(这里证s^2,比较粗略):

下面给出AC代码(注意s==t的情况):

#include<bits/stdc++.h>
using namespace std;
int l,s,t,m,ck[110],dp[100000],ze[110];
map<int,int> mp;
bool cmp(int a,int b){return a<b;
}
int main(){cin>>l>>s>>t>>m;memset(dp,0x3f,sizeof(dp));for(int i=1;i<=m;i++) scanf("%d",&ck[i]);if(s==t){int cnt=0;for(int i=1;i<=m;i++){if(ck[i]%s==0) cnt++;}cout<<cnt;return 0;}sort(ck+1,ck+m+1,cmp);int mm=s*s+10;ze[0]=0;for(int i=1;i<=m;i++){ze[i]=min(mm,ck[i]-ck[i-1])+ze[i-1];mp[ze[i]]=1;}ze[m+1]=min(mm,l-ck[m])+ze[m];dp[0]=0;for(int i=1;i<=ze[m+1]+t-1;i++){for(int j=s;j<=t;j++){if(i-j>=0){if(mp.count(i)==1) dp[i]=min(dp[i],1+dp[i-j]);else dp[i]=min(dp[i],dp[i-j]);}}}int ans=1000;for(int i=ze[m+1];i<=ze[m+1]+t-1;i++) ans=min(ans,dp[i]);cout<<ans;
}

http://www.hkea.cn/news/181179/

相关文章:

  • 公司做网站域名归谁搜索引擎营销策划方案
  • 怎么做外贸个人网站seo综合查询工具可以查看哪些数据
  • 黑客网站盗qq百度seo公司整站优化
  • 网页设计代码不能运行seo的中文名是什么
  • 灵溪网站建设外贸网站谷歌seo
  • 网站开发系统设计产品推销
  • 不用代码做网站 知乎百度引流推广怎么收费
  • 怎么看网站后台什么语言做的产品全网营销推广
  • 可以做宣传图的网站网络销售管理条例
  • 做书籍封皮的网站制作网站平台
  • 1网站建设公司长沙网站到首页排名
  • 域名还在备案可以做网站吗seo培训班
  • 前程无忧网宁波网站建设类岗位北京网站快速排名优化
  • 如何优化网站内部链接站长工具站长之家
  • 阿里云网站建设的实训报告免费的自媒体一键发布平台
  • 关于加强网站建设的意见企业获客方式
  • 帮企业建设网站保密合同优化设计电子课本
  • 金山石化网站建设广告电话
  • 网站开发 前景网络推广代理
  • 温州整站推广咨询seo网站推广专员
  • 企业营销型网站团队百度seo排名优化教程
  • 安徽平台网站建设哪里好网络策划与营销
  • 做网站接广告赚钱么凡科建站和华为云哪个好
  • 成都网站建设科技公seo营销外包公司
  • 重庆有哪些做网站 小程序的百度搜索引擎的特点
  • 仁怀哪里可以做网站自动秒收录网
  • 重庆市建设局网站推广软件一键发送
  • 合肥网络推广网络运营网站seo诊断分析和优化方案
  • 网站优化公司免费咨询sem优化推广
  • 个人做网站赚钱么宁波seo推荐推广平台