study from:

https://www.cnblogs.com/flashhu/p/9480669.html

1.前缀和

https://www.luogu.org/problemnew/show/P2513

 #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
const int mod=1e4;//
const int maxn=1e3+; int f[maxn][maxn],tot[maxn]; int main()
{
int n,k,i,j,l;
scanf("%d%d",&n,&k);
f[][]=;
for (i=;i<=n;i++)
{
tot[]=;
l=min(i*(i-)/,k);
for (j=;j<=l;j++)
tot[j]=(tot[j-]+f[i-][j])%mod;
for (j=;j<=l;j++)
f[i][j]=(tot[j]-tot[max(j-i,-)]+mod)%mod;
}
printf("%d",f[n][k]);
return ;
}

https://www.luogu.org/problemnew/show/P2511

 #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
const int mod=;//
const int maxn=5e4+; int a[maxn],t[maxn],tot[maxn],f[maxn][]; int main()
{
int n,c,x,y,i,j,k,l,r,m,result=;
scanf("%d%d",&n,&c);
c++;
for (i=;i<=n;i++)
scanf("%d",&a[i]);
l=; r=5e7;
while (l<=r)
{
m=(l+r)>>;
j=;
k=;
for (i=;i<=n;i++)
if (a[i]>m)
break;
else if (k+a[i]>m)
{
j++;
k=a[i];
}
else
k+=a[i];
if (i==n+ && j<=c)
r=m-;
else
l=m+;
}
printf("%d ",l); t[]=;
for (i=;i<=n;i++)
t[i]=t[i-]+a[i]; f[][]=;
x=,y=;
for (j=;j<=c;j++)
{
tot[-]=;
for (i=;i<=n;i++)
tot[i]=(tot[i-]+f[i][y])%mod;
//f[i][j] f[][j-1]
k=;
f[][x]=;
for (i=;i<=n;i++)
{
//[k,i)
while (t[i]-t[k]>l)
k++;
f[i][x]=(tot[i-]-tot[k-])%mod;
}
result=(result+f[n][x])%mod;
x=x^;
y=y^;
}
printf("%d",(result+mod)%mod);
return ;
}
/*
5 1
3 3 4 5 3 5 3
1 1 1 1 1
*/

2.单调队列优化

https://www.luogu.org/problemnew/show/P1886

 #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define E 2.7182818284
const int mod=;//
const int maxn=1e6+; /**
n个数字a[1]-a[n],每个大小为m的区间
最小值和最大值
**/ int a[maxn],x[maxn]; ///x:记录下标 int main()
{
int n,m,i,head,tail;
scanf("%d%d",&n,&m);
for (i=;i<=n;i++)
scanf("%d",&a[i]);
///min
head=,tail=;
///以i作为末尾的区间
for (i=;i<=n;i++)
{ while (head1<=tail1 && x[head1]<=i-m)
head1++;
while (head1<=tail1 && a[x[tail1]]>=a[i])
tail1--; ///每个点入队列一次,最多出队列一次
while (head<=tail && x[head]<=i-m) ///在区间外的数字被剔除,(i-m,i]
head++;
while (head<=tail && a[x[tail]]>=a[i]) ///求区间最小/大值,对于在前面的数,只有数值小/大于后面才有用,否则从右往左被剔除(符号相反,大于等于/小于等于),类似单调栈
tail--;
tail++;
x[tail]=i;
if (i>=m)
printf("%d%c",a[x[head]],i==n?'\n':' ');
} ///max
head=,tail=;
for (i=;i<=n;i++)
{
while (head<=tail && x[head]<=i-m)
head++;
while (head<=tail && a[x[tail]]<=a[i])
tail--;
tail++;
x[tail]=i;
if (i>=m)
printf("%d%c",a[x[head]],i==n?'\n':' ');
}
return ;
}

各种蕴含算法思想的DP - 1的更多相关文章

  1. 各种蕴含算法思想的DP - 2

    study from: https://www.cnblogs.com/flashhu/p/9480669.html 3.斜率dp study from:http://www.cnblogs.com/ ...

  2. 各种蕴含算法思想的DP - 3

    内容中包含 base64string 图片造成字符过多,拒绝显示

  3. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  4. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  5. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  6. JVM三种垃圾收集算法思想及发展过程

    JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...

  7. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  8. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

  9. [算法模版]子序列DP

    [算法模版]子序列DP 如何求本质不同子序列个数? 朴素DP 复杂度为\(O(nq)\).其中\(q\)为字符集大小. \(dp[i]\)代表以第\(i\)个数结尾的本质不同子序列个数.注意,这里对于 ...

随机推荐

  1. yocto-sumo源码解析(三):oe-setup-builddir

    该脚本的主要功能就是创建构建目录并准备一些配置文件,比如conf/local.conf,conf/bblayer.conf 1. 检测BUILDDIR环境变量是否设置好(在本系列分享第二节已经知道:B ...

  2. 第十五次ScrumMeeting博客

    第十五次ScrumMeeting博客 本次会议于12月4日(一)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...

  3. PAT甲题题解-1055. The World's Richest (25)-终于遇见一个排序的不水题

    题目简单,但解题的思路需要转换一下,按常规思路肯定超时,推荐~ 题意:给出n个人的姓名.年龄和拥有的钱,然后进行k次查询,输出年龄在[amin,amx]内的前m个最富有的人的信息.如果财富值相同就就先 ...

  4. 《Linux内核分析》第二周:操作系统是如何工作的

    杨舒雯 20135324 北京电子科技学院 杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1 ...

  5. KNY三人组对YiSmile小程序的项目总结

    设想和目标 1.我们的小程序要解决什么问题? 针对于本校学生,服务于本校学生.由于丢东西,找东西的事情每天都在上演,空间说说,朋友圈,官方QQ,信息比较冗杂,没有一个固定的平台来专门提供学生.此外,教 ...

  6. Hamburger

    Bread: 我觉得舒婷解决问题的思路还是很不错的,对于java 的窗口框架也是很熟悉,打码速度也快了很多. Meat:但是我发现你在命名的时候会出现随意的现象,如果命名只有你自己看得懂的话,那么会增 ...

  7. 【补】debug

    懒得翻别人博客了,之前的按钮不显示名字,应该是文字ui文件名写错了. 现在不存在任何已知bug.

  8. Linux dd命令制作U盘启动盘

    linux下的dd命令来自于coreutils:http://www.gnu.org/software/coreutils/ https://jingyan.baidu.com/article/d45 ...

  9. 用javaScript将页面滚动条到底部

    ((JavascriptExecutor) driver).executeScript("document.body.scrollTop=500000"); 通过该方法可以将有滚动 ...

  10. [转帖知乎]5G 网络和 4G 网络有什么区别?

    5G 网络和 4G 网络有什么区别? 先放上一篇有史以来最强的5G科普: 一个简单且神奇的公式 今天的故事,从一个公式开始讲起. 这是一个既简单又神奇的公式.说它简单,是因为它一共只有3个字母.而说它 ...