首页 > 其他分享 >2023.8.8

2023.8.8

时间:2023-08-08 09:57:15浏览次数:35  
标签:int Max bit 2023.8 转移 位为

P4310 绝世好题

首先可以想到的90pts做法是最长上升子序列dp,然后就考虑一下优化。这个做法要进行的转移过多,我们考虑怎么减少转移次数。由 & 运算我们可以发现,能转移到当前数的 \(a[j]\) , 必然和当前数 \(a[i]\) 至少有一个二进制数位上同时为 1。因此我们就可以定义 \(bit[i]\) 表示到当前数第 \(i\) 位为 1 的最长子序列长度,定义一个 \(Max\) ,再枚举当前数的每一个二进制位 \(k\) , 若第 \(k\) 位为1, $Max = max(Max, bit[k] + 1) $, 最后将转移所涉及到的 \(bit[k] = Max\) 即可。

code:

点击查看代码
#include<bits/stdc++.h>
using namespace std;

#define N 35

int n, ans = 0;
int f[N];

int main(){
//   freopen("shuju.in", "r", stdin);
//   freopen("shuju.out", "w", stdout);
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for(int i = 1; i <= n; i ++){
    unsigned int a;
    cin >> a;
    int maxf = 0;
    for(int j = 0; j < 32; j ++){
      if(a & (1 << j)){
        maxf = max(maxf, f[j] + 1);
      }
    }
    for(int j = 0; j < 32; j ++){
      if(a & (1 << j)){
        f[j] = maxf;
      }
    }
  }
  for(int j = 0; j <= 31; j ++){
    ans = max(ans, f[j]);
  }
  cout << ans;
}

P6647 [CCC2019] Tourism

标签:int,Max,bit,2023.8,转移,位为
From: https://www.cnblogs.com/yduck/p/17613355.html

相关文章

  • 2023.8.7
    今天依旧早起去了小河沿早市,吃了很多好吃的而且物价很便宜接着骑自行车去了中街,真的很喜欢在城市里瞎溜达的感觉!!!中街很大,旁边还有其他商城,我很满意。这次旅行出乎意料地重新联系上一个朋友,已经几年没和他说话,但是狗哥说话还是这么贱地气死人(暴怒)昨天晚上和朱朱各种给人打电话......
  • 2023.8.7
    今天把花式栈溢出的framefaking结束了,并且记成了笔记,查东西的时候发现活用最近兴起的ai生成挺有用的,可以很方便地查到很多基础知识,比如pwntools的一些函数,到pwntools官网去查,就感觉查起来有点难受,而且还不一定能找到满意的解答,用ai生成的答案,虽然也不能保证一定正确,但至少也有不......
  • 2023.8.6
    今天早起啦,早起化妆准备出发!外面很冷,感觉像是秋天来了其实也快秋天了哈哈,一年过的真的很快啊和朋友做的不是同一辆的火车但是基本上是同时到第一天去了太原街和山姆超市,晚上去了彩电塔夜市拍了很多照片,开心!酒店很便宜但是也很好......
  • 2023.8.7 练习
    ARC060D若\(b^2\len\),此时\(b\)很小,直接枚举即可。若\(\sqrt{n}<b<n\),此时发现其只有两位。那么\(n\bmodb+n/b=s\),即\((n/b)*(b-1)=n-s\),考虑枚举\(n-s\)的约数判断即可。ARC060E考虑借用“弹飞绵阳”一题的套路,先分块,然后预处理出\(cnt_i,nxt_i\),表示走出这个块......
  • 2023.8.7
    Bronya19C场。转圈圈一个长为\(n\)的\(01\)串\(S\),串中有且仅有一个\(1\),你可以操作若干次,每次可以将一个长为\(k\)的子串反转。对每个\(i\)询问\(1\)至少几步可以翻转到位置\(i\),另外地,一些位置在操作的过程中不能有\(1\).对于\(i\),如果不存在这个最小步数,输......
  • 2023.8.7 模拟赛
    A有一个01串,只有一位是\(1\),你每次可以翻转一个长为\(k\)的串,求出使得每个位置为\(1\)最少翻转多少次。其中有一些位是存在\(1\)的。\(n10^5\)考虑求出一个点能翻转一次到哪些点,只要不碰到边界即可。考虑线段树优化建图,建立奇偶两颗线段树。然后deque优化BFS......
  • 2023.8.3测试
    一场\(\rmNOIP\)模拟赛搬了四道Atcoder的题T1跑路一个\(n\timesm\)的\(01\)矩阵\(A\),从左上角出发,每次向下走或向右走,终点为右下角。若路径途中只经过\(0\),则称\(A\)为“好矩阵”。给定矩阵\(A\),每次可以选择它的一个子矩阵取反,求将\(A\)变成“好矩阵”的最小......
  • 2023.8 模拟赛日志
    2023暑假集训ab班day1127round。预期:\(0+25+0=25\)实际:\(80+20+0=100\)题目:23ab-day1划(待写)不会做,搞了很久最后逐一假掉。竟然有分。题解是一些恶心的区间分类,比较简单,可惜了。好像有很多做法23ab-day1Heinrich树论科技,跳过。写了暴力换根。23ab-day1朝花夕拾......
  • 2023.8.7
    CodeforcesRound890(Div.2)A.TalesofaSort题意给定一段数字序列,每次操作将每个大于\(0\)的数\(-1\),求最少几次操作后整个序列单调上升。我们可以转化成将序列中的每个数都减去某个数\(x\),使得序列大于等于\(0\)的部分单调上升,这个\(x\)就是操作的次数。也就......
  • 2023.8.7
    学习java中的类面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位类与对象的关系类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)面向对象......