【bzoj4300】绝世好题 dp
题目描述
输入
输出
样例输入
3
1 2 3
样例输出
2
题解
dp
设f[i]为选i时前i个元素的最多个数。
那么就有f[i]=max{f[j]}+1 (a[j]&a[i]!=0)
这样会TLE,于是想优化。
如果a&b!=0,根据定义,a、b的二进制数中至少有一位都为1。
那么我们可以开一个辅助数组maxn[k],记录一下所有a[i]中二进制第k位为1的f[i]的最大值。
然后扫一遍每个a[i]的数位,取最大值加到f[i]里并更新即可。
#include <cstdio>
#include <algorithm>
using namespace std;
int a[100010] , f[100010] , maxn[32];
int getnum(int n)
{
int i;
for(i = 0 ; i < 31 ; i ++ )
if((1 << i) == n)
return i;
return 0;
}
int main()
{
int n , i , j , t , ans = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ )
scanf("%d" , &a[i]);
for(i = 1 ; i <= n ; i ++ )
{
f[i] = 1;
for(j = a[i] ; j ; j -= j & (-j))
f[i] = max(f[i] , maxn[getnum(j & (-j))] + 1);
for(j = a[i] ; j ; j -= j & (-j))
{
t = getnum(j & (-j));
maxn[t] = max(maxn[t] , f[i]);
}
ans = max(ans , f[i]);
}
printf("%d\n" , ans);
return 0;
}
【bzoj4300】绝世好题 dp的更多相关文章
- BZOJ4300:绝世好题(DP)
Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). Input 输入文件共2行. 第一行包括一个整数 ...
- bzoj4300绝世好题
bzoj4300绝世好题 题意: 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0.n≤100000,ai≤10^9. 题解: 用f[i]表示当前二进制i为1 ...
- bzoj 4300: 绝世好题 dp
4300: 绝世好题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php ...
- [bzoj4300]绝世好题_二进制拆分
绝世好题 bzoj-4300 题目大意:题目链接. 注释:略. 想法: 二进制拆分然后用一个数组单独存一下当前答案即可. Code: #include <iostream> #includ ...
- bzoj千题计划190:bzoj4300: 绝世好题
http://www.lydsy.com/JudgeOnline/problem.php?id=4300 f[i] 表示第i位&为1的最长长度 #include<cstdio> # ...
- 2018.09.27 bzoj4300: 绝世好题(二进制dp)
传送门 简单dp. 根据题目的描述. 如果数列bn{b_n}bn合法. 那么有:bi−1b_{i-1}bi−1&bi!=0b_i!=0bi!=0,因此我们用f[i]f[i]f[i]表示数 ...
- bzoj4300: 绝世好题(DP)
按位DP f[i]表示第i位为1的最长子序列 #include<iostream> #include<cstring> #include<cstdlib> #inc ...
- BZOJ4300 绝世好题 【dp】
题目 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入格式 输入文件共2行. 第一行包括一个整数n. 第二行包括n个 ...
- bzoj4300 绝世好题 【dp】By cellur925
题目描述: 给定一个长度为\(n\)的数列\(a\),求\(a\)的子序列\(b\)的最长长度,满足bi&bi-1!=0(\(2<=i<=len\)). 90分做法: 并没有部分分 ...
随机推荐
- uCrop 源码剖析
GitHub: uCrop, 版本为 2.2.2 主要是探究一下内部对于图片按比例的裁剪以及压缩, 应该会更很长一段时间 疑惑点 这里记下一些源码分析过程中遇到的疑惑点 sample/src/main ...
- 北京Uber优步司机奖励政策(1月18日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 腾讯WeTest开启“测试扶持计划”赠送重磅福利(含MTSC/TiD门票)
WeTest导语 伴随着互联网行业的发展,与各行各业的连接更加紧密,竞争也变得越发激烈,用户对于产品的体验开始变得更加“挑剔”.然而目前互联网产品却始终受到各类质量问题的困扰.以兼容问题为例,应用平台 ...
- php api_token 与 user_token 简析
前言: --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是 ...
- Java+Selenium 3.x 实现Web自动化 - 1.自动化准备
(一)自动化准备 说明:本文主要记录了基于公司现有项目(一个电子商务平台),从0开始实现UI自动化的历程.从准备阶段,部分内容直接省略了基础知识,一切以最终做成自动化项目为目标,难免会有晦涩之处.文章 ...
- 关于@media不生效的问题和meta总结
1:之前做的是两套页面.现在改成响应式布局.发现加上 @media only screen and (max-width: 500px) { .gridmenu { width:1 ...
- lintcode100 删除排序数组中的重复数字
删除排序数组中的重复数字 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. 您在真实的 ...
- 【forEach控制器】-(针对,在不知道取到得参数有多少?但是要全部执行每一条的情况)
1.使用json提取器,提取全部参数 2.设置forEach控制器,他会自己把json提起器,取到得所有值,全部使用一次再停止. z
- Vuejs 基础与语法
Vue 实例 创建第一个实例 {{}} 被称之为插值表达式.可以用来进行文本插值. <!DOCTYPE html> <html lang="en"> < ...
- Memcache的客户端连接系列(一) Java
声明:本文并非原创,转自华为云帮助中心的分布式缓存服务(Memcached)的用户指南. 关键词: Memcached 客户端 Java Java连接池 Java客户端示例 用户的弹性云服务器已安装 ...