各种蕴含算法思想的DP - 1
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的更多相关文章
- 各种蕴含算法思想的DP - 2
study from: https://www.cnblogs.com/flashhu/p/9480669.html 3.斜率dp study from:http://www.cnblogs.com/ ...
- 各种蕴含算法思想的DP - 3
内容中包含 base64string 图片造成字符过多,拒绝显示
- AC自动机——多模式串匹配的算法思想
标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...
- 基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...
- 基本算法思想之递推算法思想(C++语言描述)
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...
- [算法模版]子序列DP
[算法模版]子序列DP 如何求本质不同子序列个数? 朴素DP 复杂度为\(O(nq)\).其中\(q\)为字符集大小. \(dp[i]\)代表以第\(i\)个数结尾的本质不同子序列个数.注意,这里对于 ...
随机推荐
- 20155320 Exp9 Web安全基础
20155320 Exp9 Web安全基础 [实验后回答问题] (1)SQL注入攻击原理,如何防御 SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗 ...
- Exp1 逆向与bof基础
20155332<网络对抗>Exp1 逆向与bof基础 1.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简 ...
- Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
目录 引言 概要 Query and filter context Match All Query 全文查询 Full text queries 小结 参考文档 引言 虽然之前做过 elasticse ...
- 1、Docker概述与安装
1.Docker概述 原文地址:https://docs.docker-cn.com/engine/docker-overview/#docker-engine Docker是一个开发,集装,运行应用 ...
- Jq_Js_Js、Jq获取浏览器和屏幕各种高度宽度
$(document).ready(function() {alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).he ...
- python3绝对路径,相对路径
from __future__ import absolute_import的作用: 直观地看就是说”加入绝对引入这个新特性”.说到绝对引入,当然就会想到相对引入.那么什么是相对引入呢?比如说,你的包 ...
- 浅谈我的UI设计之路
时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...
- Linux内核分析——第二周学习笔记20135308
第二周 操作系统是如何工作的 第一节 函数调用堆栈 存储程序计算机:是所有计算机基础的框架 堆栈:计算机中基础的部分,在计算机只有机器语言.汇编语言时,就有了堆栈.堆栈机制是高级语言可以运行的基础. ...
- Java中的基本数据据类型
1.整数类型 类型 字节数 表示范围 byte 1 -128~127 short 2 -32768 ~ 32767 int 4 -2147483648~2147483647 long 8 -92233 ...
- Daily Scrum - 12/03
Meeting Minutes 后端基本完成,结束当前Sprint, 开始下一个Sprint.进一步讨论了UI,并完成了任务分配. Burndown Progress part 组 ...