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

网站开发需要的知识和技术百度竞价教程

网站开发需要的知识和技术,百度竞价教程,wordpress主题制作全过程新手必看,做一个自己的网站要多少钱现按一定顺序给出所有要放置于书架上的书,共有 n 本,第 i 本书有一个长度 hi​。 书架有若干层,层与层之间的宽度不一定相等,但是一层的宽度不能小于其上所摆放的任何一本书的长度。同时,每层上的书的长度之和不能超过…

现按一定顺序给出所有要放置于书架上的书,共有 n 本,第 i 本书有一个长度 hi​。

书架有若干层,层与层之间的宽度不一定相等,但是一层的宽度不能小于其上所摆放的任何一本书的长度。同时,每层上的书的长度之和不能超过一个给定的参数 m,且任何层上的书必须是给出的书的序列中连续的几本。

书架的宽度是所有层的宽度之和,求书架的最小宽度。

输入格式

输入的第一行包含两个整数 n 和 m。

第 2 到第 (n+1) 行,每行一个整数,第 (i+1) 行的整数代表第 i 本书的长度 hi​。

输出格式

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

输入输出样例

输入 #1复制

4 6
1
3
3
1

输出 #1复制

5思路:

设dp[i]表示1~i放到书架上的最小代价,

则dp[i]=min{0<j<=i&&sum[i]-sum[j-1]<=m | max{j<=k<=i|height[k]}+dp[j-1]} 显然这个dp是O(n^2)的,一定会超时,于是思考优化。

考虑数据结构:需要能直接读出dp[i]的值,但是由于最大值会随时变动,我们要想办法维护最大值。

注意到每个数字只会对它前面的值的最大值造成影响,于是可以使用单调栈统计每个数最左端可以延伸到哪里,也就是说最多能到哪里使得所有数字都不大于它。

有了单调栈预处理出的延伸值,我们可以使用线段树维护dp。

假设当前计算到i,则每个叶子节点j表示max{j<k<=i|height[k]+dp[j]},考虑如何更新。

更新有两种,一种是更新叶子节点的dp值,一种是把区间[a,b]的最大值更新为t,也就是把[a,b]全部置为t。

于是,每个节点维护三个值:

1.lazy,标记[a,b]置为t的操作

2.res,如果是叶子节点就是max{j<k<=i|height[k]+dp[j]},否则就表示所有儿子节点中上述值最小的那个

3.mn,如果是叶子节点就表示叶子节点对应的dp值,否则就表示所有儿子节点中dp值的最小值

于是线段树就可以投入使用了,

对于第一种更新,直接自下而上更新一遍mn值即可;

对于第二种更新,自上而下pushdown,根据dp的递推公式可知res[i]=mn[i]+lazy[i]。

具体如何操作呢?

单调栈预处理之后,由于有dp[0]=0,因此update1(0,0)(表示在0位置将dp值设为0)

然后对于每个i,记单调栈延伸值为k,满足sum[i]-sum[j]<=m的最小的j记为a,

首先update2(k,i,height[i])(表示将区间[k,i)的最大值置为height[i],注意区间左闭右开!)

然后直接dp[i]=query(a,i)(表示查询区间[a,i)中res的最小值)

最后再update1(i,dp[i]),也就是把i位置的dp值设置一遍。

综上所述,单调栈预处理O(n),线段树O(nlogn),因此总复杂度O(nlogn)
代码:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 100005, maxt = 262144;
int dp[maxn], high[maxn], sta[maxn], sum[maxn], n, m;
int lazy[maxt], mn[maxt], res[maxt], tn;
inline void pushup(int x){int ls = x * 2 + 1, rs = x * 2 + 2;mn[x] = min(mn[ls], mn[rs]);if(lazy[x] != 0) res[x] = mn[x] + lazy[x];else res[x] = min(res[ls], res[rs]);
}
inline void pushdown(int x){if(!lazy[x]) return;int ls = x * 2 + 1, rs = x * 2 + 2;lazy[ls] = lazy[rs] = lazy[x]; lazy[x] = 0;res[ls] = lazy[ls] + mn[ls];res[rs] = lazy[rs] + mn[rs];
}
void update1(int x, int s){x += tn - 1;mn[x] = s;while(x > 0){x = (x - 1) / 2;mn[x] = min(mn[x], s);}
}
void update2(int a, int b, int x, int l = 0, int r = tn, int k = 0){if(a >= r || b <= l) return;if(a <= l && b >= r){lazy[k] = x;res[k] = x + mn[k];return;}pushdown(k);update2(a, b, x, l, (l + r) / 2, k * 2 + 1);update2(a, b, x, (l + r) / 2, r, k * 2 + 2);pushup(k);
}
int query(int a, int b, int l = 0, int r = tn, int k = 0){if(a >= r || b <= l) return INF;if(a <= l && b >= r) return res[k];pushdown(k);return min(query(a, b, l, (l + r) / 2, k * 2 + 1),query(a, b, (l + r) / 2, r, k * 2 + 2));
}
int main(){scanf("%d%d", &n, &m);for(tn = 1; tn <= n; tn <<= 1);memset(mn, 0x3f, sizeof(mn));memset(res, 0x3f, sizeof(res));update1(0, 0);for(int i = 1, tp = 0, j = 0; i <= n; i++){scanf("%d", high + i);sum[i] = high[i] + sum[i - 1];while(tp > 0 && high[sta[tp - 1]] <= high[i]) tp--;while(sum[i] - sum[j] > m) j++;int lm = max(j, !tp ? 0 : sta[tp - 1]);sta[tp++] = i;update2(lm, i, high[i]);dp[i] = query(j, i);update1(i, dp[i]);}printf("%d", dp[n]);return 0;
}

AC截图:


文章转载自:

http://RHrqDF7l.hbdqf.cn
http://Jxo5bdkU.hbdqf.cn
http://BZqxC3GP.hbdqf.cn
http://tsmhEFXy.hbdqf.cn
http://G6OfadTP.hbdqf.cn
http://A3tzT7m5.hbdqf.cn
http://S1TNPofP.hbdqf.cn
http://N82XvM0I.hbdqf.cn
http://aUwk05WV.hbdqf.cn
http://g4bUVkQF.hbdqf.cn
http://ZYPXfwfR.hbdqf.cn
http://GuBTLlH0.hbdqf.cn
http://apgsrzOt.hbdqf.cn
http://KfzZ5tjx.hbdqf.cn
http://Wj1HWSqQ.hbdqf.cn
http://Xbehkver.hbdqf.cn
http://5jbBHLu2.hbdqf.cn
http://JNavVsjk.hbdqf.cn
http://uWGS1N8L.hbdqf.cn
http://xdIS9vMM.hbdqf.cn
http://zw2cbnH6.hbdqf.cn
http://Re0XQaG9.hbdqf.cn
http://lTLF8ZGJ.hbdqf.cn
http://ItppQnIY.hbdqf.cn
http://NdHpWmP2.hbdqf.cn
http://qz1gVWU8.hbdqf.cn
http://g0hOWhFg.hbdqf.cn
http://mm1fPI11.hbdqf.cn
http://1wigxCTI.hbdqf.cn
http://uEceqT9Y.hbdqf.cn
http://www.dtcms.com/wzjs/626378.html

相关文章:

  • 深圳 企业 网站建设高端网站设计元素图片
  • 青岛哪家做网站的公司好wordpress怎样设置留言
  • 网站建设推广实训总结网站代码字体变大
  • 临夏市建设局网站闽侯福州网站建设
  • 凡科建设网站如何如何做网站首页收录
  • 番禺网站建设效果网站运营专员岗位要求
  • 产品网站建设框架泰安微信网站制作
  • 做购物网站流程站长工具的使用seo综合查询排名
  • 三角镇建网站公司企业信息系统查询系统官网江苏
  • 深圳网站制作易捷网络微信公众号开发步骤
  • pc端宣传网站开发办网站需要备案吗
  • 黄浦网站建设公司动画形式的h5在哪个网站做
  • 国家外管局网站怎么做收汇代卖平台哪个好
  • 网站建设费记在什么科目下专业做微视频的网站
  • 网站改版怎么弄青岛专业网站开发公司
  • 为某网站做网站推广策划方案推广教程
  • 五华区网站住房城乡建设部官网
  • 开办 网站建设费 科目通过法人姓名查企业
  • 调颜色网站襄阳最新消息
  • 给网站设置长尾关键词网站写文案
  • 容易收录的网站一般做网站是在什么网站找素材
  • php网站的后台地址如何让自己做的网站让别人看到
  • 镇江网站推广优化网站如何进行网络推广
  • 品牌网网站建设下载ps软件免费版下载安装
  • 网站建设技术进行开发小红书账号代运营
  • 网站开发赚钱吗?哈尔滨网站建设报价
  • 医院网站建设趋势唐山做网站那家好
  • 没有网站可以做seo排名吗如何去掉wordpress版权信息
  • 站长工具seo设计制作一个保温杯教学反思
  • 网站建设项目详情江苏网站建设系统服务