首页 > 其他分享 >P4310 绝世好题

P4310 绝世好题

时间:2023-11-15 16:57:08浏览次数:37  
标签:剪枝 绝世 int max 好题 P4310

P4310 绝世好题

基础思路

类似 \(LIS\)。但只有 \(80pts\)

for(int i=1;i<=n;++i)
	{
		for(int j = 1; j < i; ++j)
		{
			if(s[i]&s[j])f[i]=max(f[i],f[j]+1);
		}
	}

优化时间

一种很妙的剪枝。

因为 \(F_i\) 都是由 \(\max(F_j + 1)\) 转移而来,可以用一个数组维护上一轮转移最大的 \(F\) , 这样一旦本轮转移的 \(F[i]\) 已经达到了上一轮最大的 \(F\) 加 \(1\),显然就已经不用继续枚举了,可以 break

比较玄学的是,这样剪枝要倒着枚举 \(j\) 才能过,可能涉及按位与的原理,不理解。

#include<cstdio>
#define N 200005

int max(int i,int j){
    return i>j?i:j;
}

int n;
int s[N];
int f[N];
int ma[N];

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i)scanf("%d",&s[i]);
    for(int i=1;i<=n;++i)f[i]=1;
    for(int i=1;i<=n;++i)
	{
		for(int j = 1; j < i; ++j)
		{
			if(f[i] == ma[i-1] + 1)break;
			if(s[i]&s[j])f[i]=max(f[i],f[j]+1);
		}
		ma[i]=max(ma[i-1], f[i]);
	}
    printf("%d",ma[n]);
    return 0;
}

标签:剪枝,绝世,int,max,好题,P4310
From: https://www.cnblogs.com/kdlyh/p/17834203.html

相关文章

  • 高等代数(I)好题
    命题:令\(C=\begin{pmatrix}A\\B\end{pmatrix}\)若\(AB=BA\),则:\[r(A)+r(B)\ger\begin{pmatrix}A\\B\end{pmatrix}+r(AB)\]证明:考虑\(CX=0\)的基础解系\(\alpha_1,\cdots,\alpha_t\),同时也是\(AX=0\)和\(BX=0\)的基础解系。通过\(\{\alpha_i\}\)扩充得到......
  • 关于有很多好题写了但是不知道放哪所以就放在同一个博客里了md这标题怎么这么长这件事
    不分难度.我只是想把一些好玩或者有思维含量的题塞进来.InversionCounting我是不会告诉你其实我是因为这题标签有平衡树才做的.这题标签有平衡树.但是并不需要平衡树.这题操作时在反转区间嘛,然后求逆序对.容易发现,实际上有变化的逆序对只有完全在这个区间内的.换句话说,......
  • 一些好题
    P3034不是很常规的题目。考虑奶牛之间的相对位置。因为一头奶牛最多跳出来一次,所以两头奶牛的相对位置最多改变两次。这样就可以求出任意两头奶牛的相对位置。这样的话直接自定义一个比较奶牛的函数然后sort一遍就好了。代码#include<bits/stdc++.h>usingnamespacest......
  • 2023.10.11 一些好题
    A你有\(m\)个相同的球,球有性能\(c\),你可以测试\(x\),若\(x\gec\),那么球会碎掉,若\(x<c\),那么球不碎。性能的范围\(n\le1e5\)。求最多要测试多少次。首先答案有一个上限是\(\logn\)。所以令\(m\to\min(m,\logn)\)所以我们记状态可以记\(dp_{l,r,k}\)表示当前确......
  • 51nod 3179 绝世好题
    原题确实是绝世好题朴素\(dp\)问题非常simple,考虑优化想尽数据结构无从下手?既然二进制考虑按位贪心发现对于\(a_i\)所有为\(1\)的位上一位只要有一位为\(1\)即可,剩下的显然越靠后越好因此我们设\(dp_{i,j}\)表示前\(i\)个数,其中最后一个被选的数第\(j\)位为......
  • DS 好题记录
    P6881[JOI2020Final]火事题意转化:求\(\sum_{i=l}^{r}\max_{j=i-t}^{i}\{a_j\}\)。考虑离线,询问按\(t\)从小到大排一遍,思考什么时候\(a_i\)的值会改变。我们可以找到\(a_i\)前第一个比它大的值的位置\(l\)和后面第一个比它大的值的位置\(r\)。那么当\(t\ge(l-i......
  • 好题记录
    我是大鸽子。慢慢更新吧。CF666E跑一边后缀数组,转化为区间l,r值域为pl,pr的众数。由于并不强制在线,考虑莫队。莫队做完值域分块,支持单点修改区间查询max。加法是简单的,减法不好做,于是就回滚一下就好了。#include<bits/stdc++.h>usingnamespacestd;typedeflonglong......
  • 近现代 ABC&ARC 好题选做
    ARC161D题意定义一张简单无向图的密度为:\(\displaystyleM(G=\{V,E\})=\frac{|E|}{|V|}\)。给定\(N,D\),任务是构造一张点数为\(N\),边数为\(ND\)的简单无向图\(G=(V,E)\),满足以下条件:对于\(V\)的每一个非空真子集\(X\),满足\(G\)的关于\(X\)的导出子图的......
  • AtCoder 好题选做
    AtCoderRegularContest091-F-StrangeNimhttps://atcoder.jp/contests/arc091/tasks/arc091_d清北学堂讲的一道题,我艹感觉这结论很难猜啊。做这种题一定是先写爆搜打表啊,先写了一个博弈论求SG函数:然后发现了一个规律:\(\text{SG}(nk,k)=n\)。还有一个规律:当\(n<k......
  • 【23.05.03】好题题解
    好题题解A题目大意:计算一个项数为\(n\)的多项式除以\(x^3-x\)的余数多项式。数据范围:对于\(100\%\)的数据:\(2\leqn\leq2\times10^5\)解题分析:水题,直接多项式除法模拟即可。需要注意细节。ACCode:#include<bits/stdc++.h>usingnamespacestd;#d......