首页 > 糟糕的打谱员
头像 我是签到糕手
发表于 2024-07-05 01:43:49
这题一开始我想的是n2,然后发现a[i]的最大值为10,与之前暴力dp相结合。 设置一个桶为t[i][j]代表下在i处的j颜色所代表的最大步数。 那么dp[i]=max(dp[i],t[a[i].second][!a[i].first]) #include<bits/s 展开全文
头像 此在Dasein
发表于 2025-12-05 04:03:59
本题要求从一个记录序列中找出最长的子序列,满足相邻两步玩家交替且劫争编号不同。由于劫争编号范围很小(1~10),可以采用动态规划,按顺序扫描每一步,维护以每种(玩家,劫争)组合结尾的最长子序列长度。对于当前步 (c, a),它可以接在之前任意一个与 c 不同且劫争不等于 a 的状态之后,因此只需从另 展开全文
头像 Myaljk
发表于 2022-03-14 11:25:54
因为题目规定 任意相邻的两步,玩家不同(一黑一白); 任意相邻的两步,不能下在同一个劫争处。 我们只需要对每个操作枚举一下a,状态转移方程:dp[i]=max(dp[i],dp[pre[j][k]]+1);a,状态转移方程:dp[i] = max(dp[i],dp[pre[j][k]] + 展开全文
头像 wsd_tod
发表于 2025-12-05 13:47:47
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAX_A = 11; int main() { ios::sync_wi 展开全文
头像 mollor
发表于 2025-12-05 15:00:20
线段树是对的孩子们,因为普通dp的话只能想出来O(n2)的做法只好用线段树O(nlogn)的方法过去了。开两个线段树,一个是0下棋的时候,另一个是1下棋的时候,每次都在对方的范围里面查找不是以ai结尾的最大的合法长度就好了最后把两边最大的长度比一下就好了 #include<bits/stdc+ 展开全文
头像 编程小海浪
发表于 2025-12-05 23:34:46
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); 展开全文
头像 周康禧
发表于 2025-12-05 11:26:25
#include <bits/stdc++.h> using namespace std; using ll = long long int; using ld = long double; using PII=pair<ll,ll>; using PIII=pair< 展开全文

等你来战

查看全部