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

苏州新区网站制作建设推南昌百度快速排名提升

苏州新区网站制作建设推,南昌百度快速排名提升,重庆旅游网站建设,wordpress产品幻灯片原题链接&#xff1a;Problem - D - Codeforces 题面&#xff1a; 大概意思就是让你在翻转01串不超过k次的情况下&#xff0c;使得a*&#xff08;0的最大连续长度&#xff09;&#xff08;1的最大连续长度&#xff09;最大&#xff08;1<a<n&#xff09;。输出n个数&…

原题链接:Problem - D - Codeforces

题面: 

大概意思就是让你在翻转01串不超过k次的情况下,使得a*(0的最大连续长度)+(1的最大连续长度)最大(1<=a<=n)。输出n个数,第i个数代表a=i时的最大值。

思路:可以发现n<=3000,我们可以用O(n^2)的复杂度来求解。首先我们先假设最长连续0串在左边,最长的连续1串在右边,一开始最朴素的思想就是:

枚举最长0串的左端点l和右端点r,并且使它合法。设区间[l,r]中1的个数为x,也就是说[l,r]变成全0串需要的操作数为x。然后O(n^2)求出区间[r+1,n]我们能得到的最长1串,长度为y(此时我们能进行的最大操作数为k-x)。我们定义mp[i]:0串长度为i时,1串的最长长度为mp[i]。然后我们更新mp[x]为max(mp[r-l+1],y)即可。

因为这是0串在左,1串在右,所以我们还需要将字符串翻转然后再这样处理一次。

最后输出的时候,每次我们只需要遍历mp,a*i+mp[i]取max即可。

当然这样子操作的总复杂度是O(n^4),我们肯定是不能接受的,那么怎么能让它复杂度降下来呢?我们可以利用dp来预处理,用dp[i][j]来表示[i~n]区间,操作数最大为j时,1串的最大长度。

具体实现见代码注释。

int n,k;
int mp[maxn];
//表示连续0的长度为i的时候,最长连续1的长度最大为mp[i]
string x;
void f() {vector<vector<int>>dp(n+2,vector<int>(k+2));//dp[i][j]表示[i~n]区间,操作数最大为j时,连续1的最大长度。 vector<int>sum(n+2);//sum[i]表示[1,i]中字符1的个数 string s=" "+x;//下标从1开始,防止数组越界 for(int i=n; i>=1; i--) {//预处理出i~n的字符串在操作数为k时候变为1的最大连续串长度dp[i]=dp[i+1]; //大区间可以由小区间的方案转移过来 ,因为在相同操作数下,[i,n]的最长连续1串 >=[i+1,n]的最长连续1串 int cost=0;for(int j=i; j<=n; j++) {cost+=(s[j]=='0');if(cost<=k) dp[i][cost]=max(dp[i][cost],j-i+1);//如果合法,则答案取max else break;//后面的cost都大于k了,直接break }for(int j=1; j<=k; j++) dp[i][j]=max(dp[i][j],dp[i][j-1]);//大的操作数方案可以由小的操作数方案转移过来,因为你用x次操作能办到的,用x+1次操作也一定能办到 }mp[0]=max(mp[0],dp[1][k]);//将全是1,没有0的情况特殊处理 for(int i=1; i<=n; i++)sum[i]=sum[i-1]+(s[i]=='1');//预处理前缀1的个数 for(int i=1; i<=n; i++) {for(int j=i; j<=n; j++) {if(sum[j]-sum[i-1]>k)continue;//如果操作数大于k了则不合法,continue mp[j-i+1]=max(mp[j-i+1],dp[j+1][k-sum[j]+sum[i-1]]);//j-i+1为连续0的长度,k-sum[j]+sum[i-1]为剩下的操作数 }}
}
void solve() {cin>>n>>k>>x;for(int i=0; i<=n; i++) mp[i]=-1;//初始化为-1 f();//处理0串在左,1串在右的情况 reverse(x.begin(),x.end()),f();//等于处理1串在左,0串在右的情况 for(int i=1; i<=n; i++) {int ans=0;for(int j=0; j<=n; j++) {//当0的长度为j时 if(mp[j]!=-1)ans=max(ans,i*j+mp[j]);}cout<<ans<<" ";}cout<<endl;
}

 

http://www.ds6.com.cn/news/104870.html

相关文章:

  • 美术对网站开发有用吗四川seo推广
  • 磁贴式网站模板打开百度首页
  • 新网站怎么做seo 风享如何注册网站
  • 美的地产集团官方网站建设事件营销的案例有哪些
  • 企业管理六大体系华为seo诊断及优化分析
  • 网站建设 关于我们谷歌seo公司
  • 国内免费顶级域名网站域名关键词查询
  • flash做网站的论文百度2022年版本下载
  • 哪些网站是用asp.net做的日本樱花免m38vcom费vps
  • 天津网站制作西安类似58的推广平台有哪些平台
  • 网站扒下来了怎么做视频号链接怎么获取
  • 注册文化传媒公司流程和费用青岛招聘seo
  • 第一模板网站广安seo外包
  • 上海网站 建设大批量刷关键词排名软件
  • 中国域名管理中心360搜索引擎优化
  • 企业品牌网站建设应该怎么做营销 推广
  • ui设计师是吃青春饭吗杭州seook优屏网络
  • 沙田镇网站仿做武汉seo排名公司
  • web制作网页计算器南宁seo服务公司
  • 偏门赚钱网站网站seo博客
  • 如何评价网站是否做的好坏app拉新项目
  • 公积金网站 如何做减员百度建立自己的网站
  • 公司制作网站怎么做的深圳seo优化排名优化
  • 哈尔滨模板建站软件网站优化seo教程
  • 山西自助建站系统怎么用武汉网络广告推广服务
  • 做健身网站步骤顾问式营销
  • 物流网站查询青岛做网站推广
  • 社区网站开发5118关键词挖掘工具
  • 如何给网站做后台seo公司
  • 义乌高端网站建设抖音引流推广怎么做