4300: 绝世好题

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 564  Solved: 289
[Submit][Status][Discuss]

Description

给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len)。

Input

输入文件共2行。
第一行包括一个整数n。
第二行包括n个整数,第i个整数表示ai。

Output

输出文件共一行。
包括一个整数,表示子序列bi的最长长度。

Sample Input

3
1 2 3

Sample Output

2

HINT

对于100%的数据,1<=n<=100000,ai<=10^9。


  刚考完联赛回家搞了一个星期常规=- =

  然后老师叫我们还是要保持一下手感的是吧

  然后随便找了一道水题。。

  貌似是单调DP?

  发现不行

  然后想了一下按位单调DP

  感觉好像可以但不是最优解。。

  看了一下status

  发现最短的代码400b左右

  貌似不是单调DP?

  然后查了一下。。

  f[j]代表第j位的最优值

  之后每次更新一个数每一位的最优值为所有位的f值+1即可。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> #define maxn 100001 using namespace std; int a[maxn],f[maxn]; inline int in()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-'',ch=getchar();
return x;
} int main()
{
int n;
n=in();
for(int i=;i<=n;i++)a[i]=in();
for(int i=;i<=n;i++)
{
int cal=;
for(int j=;j<=;j++)if(a[i] & (<<j))cal=max(cal,f[j]+);
for(int j=;j<=;j++)if(a[i] & (<<j))f[j]=cal;
}
int ans=;
for(int j=;j<=;j++)ans=max(ans,f[j]);
printf("%d",ans);
return ;
}

【递推】BZOJ 4300:绝世好题的更多相关文章

  1. HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)

    HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...

  2. bzoj 4300: 绝世好题

    4300: 绝世好题 Time Limit: 1 Sec  Memory Limit: 128 MB Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi& ...

  3. BZOJ 4300: 绝世好题 动态规划

    4300: 绝世好题 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4300 Description 给定一个长度为n的数列ai,求ai的 ...

  4. bzoj 4300: 绝世好题 dp

    4300: 绝世好题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php ...

  5. BZOJ 4300 绝世好题(位运算)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4300 [题目大意] 给出一个序列a,求一个子序列b,使得&和不为0 [题解] ...

  6. bzoj 4300 绝世好题——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4300 考虑 dp[ i ] 能从哪些 j 转移过来,就是那些 a[ j ] & a[ ...

  7. bzoj 4300 绝世好题 —— 思路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4300 记录一下 mx[j] 表示以第 j 位上是1的元素结尾的子序列长度最大值,转移即可. ...

  8. bzoj 4300: 绝世好题【dp】

    设f[i][j]表示数列到i为止最后一项第j位为1的最大子序列长度,每次从i-1中1<<j&a[i]!=0的位+1转移来 然后i维是不需要的,答案直接在dp过程中去max即可 #i ...

  9. BZOJ 4300: 绝世好题 二进制

    对于每一个数字拆位,然后维护一个大小为 30 左右的桶即可. code: #include <bits/stdc++.h> #define N 100006 #define setIO(s ...

随机推荐

  1. [leetcode]_Longest Common Prefix

    问题:寻找最长公共前缀 思路:就是逐一检查每个string中的每一位,碰到不相等的时候,结束:每个string中这一位都相等,加入到common prefix中~ public String long ...

  2. swiper 页面双向设置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  3. C++实现01串排序

    题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序. 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符. 输出描述:重新排 ...

  4. 15)Java &和&&

    &,双目运算符:将两个表达式的值按二进制位展开,对应的位(bit)按值进行"与"运算,结果保留在该位上- 比如170&204对应二进制就是      1010101 ...

  5. Windows7不能打开telnet功能

    在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...

  6. PHP 把GBK编码转换为UTF8

    //把GBK编码转换为UTF8 $name="勿以善小而不为"; $name=iconv("GBK", "UTF-8", $name);

  7. perl thread

    #!/usr/local/bin/perl use threads; @domain = ("tom.com", "chinadns.com", "1 ...

  8. eclipse新建android项目,编译出错解决方法

    1.新建android项目 2.在libs中,将android-support-v4.jar添加到生成目录 3.如果项目引用了ActionBar等,需要引用V7的话,添加外部Jar包,路径为eclip ...

  9. 算法系列6《MAC》

    1. 简介 MAC是使用命令的所有元素(包括命令头)产生的.一条命令的完整性,包括命令数据域(如果存在的话)中的数据元,通过安全报文传送得以保证.按照如下的方式使用单重或三重DEA加密方式产生MAC: ...

  10. Oracle 将普通表转换为分区表

    DB:11.2.0.30 将普通表转换为区分表 一.利用原表重建分区表SQL>create table yoon ( id number primary key ,time date ); Ta ...