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. struts2的DevMode模式

    在实际应用开发或者是产品部署的时候,对应着两种模式: 1.开发模式(devMode),此时,DevMode=true 2.产品模式(proMode),此时,DevMode=false 在一些服务器或者 ...

  2. Linux入门50指令

    1, mkdir创建目录 make directory 可以带着路径,在什么位置创建什么目录 如:mkdir /etc/date  在目录etc下创建date目录 重要参数 –p 递归创建,mkdir ...

  3. Sql Server 日期格式化函数

    Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...

  4. php 301 重定向 转自http://www.icoa.cn/a/475.html

    内容简介 有时候我们的有多个域名指向同一个网站,或者我们更换了网站的网址,那么怎么样将原来网站的流量导入到新网址中呢,那么我们可以用301重定向的方式,而且这种方式是对搜索引擎比较友好的方式.如果首页 ...

  5. Shell入门教程:命令替换 $() 和 ``

    所谓命令替换,是把命令执行后的标准输出放入变量中.这是一个十分有威力的功能.例如说, 想查看工作目录中所有的文件名,可执行ls命令,但如何把这些文件名存入变量中,供往后的程序代码再利用呢? 使用命令替 ...

  6. MySQL SQL中的安全问题

    一.SQL注入是一个很常见的问题:利用的原理是SQL语句中的 "or"操作符或者"/*"和"#"注释符.前者利用逻辑运算,或者利用MySQL ...

  7. javascript基础06

      javascript基础06 splice var del_arr = del.splice(0,2); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返 ...

  8. javascript删除数组某个元素

    1.首先可以给js的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引 Array.prototype.indexOf = function(val) { for (var i = 0; ...

  9. PHP 抽象类 和 interface 接口

    静态: 在类里面 定义的变量   在别的地方引用的时候 只要是  静态引用 就一定要加$ 普通成员 : 属于对象的 静态成员: 属于类的  static  (通过双冒号调用) 调用静态成员:   re ...

  10. Note1: windows下Python IDE(Eclipse+Pydev)

    毕设想做一个个性化音乐推荐系统,真的是从零开始学起,通过<推荐系统实践>大致地了解了一些基础知识,目前在啃<集体智慧编程>. 选用的开发环境是 Eclipse+Pydev . ...