D1. Xor-Subsequence (easy version)
D1. Xor-Subsequence (easy version)
https://codeforces.ml/problemset/problem/1720/D1
题意
给你长度为n的数组a 让你找出a最长的子序列满足
即这个子串相邻的两个数 满足 且
这是简单版本
思路
因为给定了的大小最大不超过200 200的二进制位最高位为第8位 即亦或上一个只会最多影响最右边的八位
而这八位最大的数就是 11111111 即255 对于第 他不可能由他以前>255的数转移过来 所以很多都是不必要的
dp方程:
dp[i] : 前i个第i个取最多有几个
if
最后取最大的dp[i]为答案
#include<bits/stdc++.h>
#define ll long long
#define all(a) a.begin(),a.end()
using namespace std;
const int N = 3e5 + 5;
const int M = 1e6 + 1;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
int n;
ll a[N], dp[N];
void solve() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i <= n; i++) dp[i] = 1;
for (int i = 1; i < n; i++) {
for (int j = i - 1; j >= max(i - 255, 0); j--) {
if ((a[j] ^ i) < (a[i] ^ j)) dp[i] = max(dp[i], dp[j] + 1);
}
}
ll ans = 0;
for (int i = 0; i < n; i++) ans = max(ans, dp[i]);
cout << ans << "\n";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int _t = 1;
cin >> _t;
while (_t--)
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】