1、BestCoder Round #89

2、总结:4个题,只能做A、B,全都靠hack上分。。

01  HDU 5944   水

1、题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列。

2、总结:有个坑,y,r,x顺序组公比q>1,也可反着来x,r,y顺序组。

#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<map>
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=,MAX=; int main()
{
int t,a[N];
char str[N];
scanf("%d",&t);
while(t--){
scanf("%s",str+); //才知道可以这样输
int len=strlen(str+),sum=; //str+1
for(int i=;i<=len;i++) {
if(str[i]=='y') {
for(int j=;i*j*j<=len;j++) {
if(str[i*j]=='r'&&str[i*j*j]=='x') {
sum++;
}
}
}
}
for(int i=;i<=len;i++) {
if(str[i]=='x') { //x,r,y反顺序扫一遍
for(int j=;i*j*j<=len;j++) {
if(str[i*j]=='r'&&str[i*j*j]=='y') {
sum++;
}
}
}
}
cout<<sum<<endl;
} return ;
}

02  HDU 5945   好题,单调队列优化的dp

1、题意:给出x,k,t三个数,目的是将x变到1。有两种操作,1.X=X−i(0<=i<=t).  2.if k|X,X=X/k.

2、总结:还不太懂单调队列,看了一个黄名爷的代码。只是这题本来也好坑,hack之后就没几个过了的。

3、思路:设f[i]表示将i变到1所需的最小步骤。如果k|i , f[i]=min( f[j] , f[i/k] ); 否则f[i]=min( f[j] ),其中i-t<=j<=i-1。这里要快速求出min( f[j] ),用单调队列维护一下即可,时间复杂度为O(n)。

#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=; //一开始把这两个数组放main()里面直接就溢出了
int f[N],q[N]; //f[i]表示将i变到1的操作次数q[i],q[N]存储i-t<=j<=i-1范围的位置,并且单调递增
int main()
{
int T,x,k,t;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d",&x,&k,&t);
int head=,tail=;
q[++tail]=;
mes(f,INF); f[]=;
for(int i=;i<=x;i++) {
if(i%k==) f[i]=f[i/k]+;
while(i-t>q[head]&&head<=tail) head++; //不符合的弹出
if(head<=tail) f[i]=min(f[i],f[q[head]]+); //f[i]=min( f[j] )
q[++tail]=i; //位置压入队列
while(head<tail&&f[q[tail]]<f[q[tail-]]) q[tail-]=q[tail],tail--; //要使f[q[head]]=min( f[j] ),所以q中不符合单调递增的就去掉; 注意head<tail,如果==就说明q中只存了一个位置,也就没必要进行这一步
}
printf("%d\n",f[x]);
} return ;
}

BestCoder Round #89 02单调队列优化dp的更多相关文章

  1. 单调队列优化DP,多重背包

    单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...

  2. bzoj1855: [Scoi2010]股票交易--单调队列优化DP

    单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w ...

  3. hdu3401:单调队列优化dp

    第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次 ...

  4. Parade(单调队列优化dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    ...

  5. BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP

    BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在 ...

  6. 【单调队列优化dp】 分组

    [单调队列优化dp] 分组 >>>>题目 [题目] 给定一行n个非负整数,现在你可以选择其中若干个数,但不能有连续k个数被选择.你的任务是使得选出的数字的和最大 [输入格式] ...

  7. [小明打联盟][斜率/单调队列 优化dp][背包]

    链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...

  8. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  9. BZOJ1791[Ioi2008]Island 岛屿 ——基环森林直径和+单调队列优化DP+树形DP

    题目描述 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样的岛屿,都有一 ...

随机推荐

  1. 关于使用 no-js (Modernizr)

    最近有些朋友问到:为什么我的网页 code 有 class="no-js" ? <!DOCTYPE html> <html dir="ltr" ...

  2. Java虚拟机 safepoints 初探

    safepoint的定义很不规范,还跟JVM的具体实现有关,我们的讨论主要针对Hotspot VM. 先看看openjdk的官方解释:  http://openjdk.java.net/groups/ ...

  3. cf723b Text Document Analysis

    Modern text editors usually show some information regarding the document being edited. For example, ...

  4. 【bzoj3036】绿豆蛙的归宿

    题目描述 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如 ...

  5. 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...

  6. Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()

    函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...

  7. sql中case when语句的使用-来自网摘文章

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. Put-Me-Down项目Postmortem2

    一.设想和目标 二.计划 三.资源 四.变更管理 五.设计/实现 六.测试/发布 总结 一.设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的 ...

  9. MFC在关闭第二个窗口时关闭主对话框

    AfxGetApp()->m_pMainWnd->SendMessage(WM_CLOSE);//关闭主对话框

  10. exception catch doesn't work?? (python 3)

    exception catch doesn't work?? (python 3) except u.URLError, e: ^ SyntaxError: invalid syntax in Pyt ...