首页 > 其他分享 >题解 P9911 [COCI 2023/2024 #2] Kuglice

题解 P9911 [COCI 2023/2024 #2] Kuglice

时间:2024-01-24 15:16:37浏览次数:382  
标签:le return int 题解 2024 P9911 Kuglice

传送门

题意

应该是显然的.

分析

首先,观察数据范围:\(1\le n\le 3000\),也就是说,时间复杂度应当在 \(O(n^2)\) 左右。

其次,观察我们取球的顺序,是只能从左或右取,因此,我们每次留下的必然是连续的一段。

所以,我们显然可以采用区间 DP 来解决这道题。

确定状态:\(f_{i,j}\) 表示现在取了剩下 \(i\sim j\),先手的最大得分。

考虑转移:由于我们是先后手易手的取数,所以我们当前的状态是从小 \(1\) 的区间的对立面转移过来,这里有两种方式,一种是直接记录对立面,另一种,我们可以记录区间能够取到的价值的总和,显然这个是和取法无关的。

#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int N = 3e3+5;
inline int read() {
	int x;
	scanf("%d",&x);
	return x;
}
int n, m,a[N],qzh[N][N],tot[N][N],fr[N],en[N],f[N][N];
inline int val(int L,int R,int x) {
	if(x) return L<=fr[a[R]]&&(en[a[R]]==R);
	else  return (fr[a[L]]==L)&&en[a[L]]<=R;
}
signed main() {
	n=read();
	memset(fr,0x3f,sizeof fr);
	for(int i=1; i<=n; ++i) a[i]=read(),fr[a[i]]=min(fr[a[i]],i),en[a[i]]=i;
	for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) qzh[i][j]=qzh[i-1][j]+(a[i]==j);
	for(int i=1; i<=n; ++i) if(fr[i]<=en[i]) tot[fr[i]][en[i]]++;
	for(int i=2; i<=n; ++i) {
		for(int j=1; j+i-1<=n; ++j) {
			int L=j,R=j+i-1;
			tot[L][R]=tot[L][R]+tot[L+1][R]+tot[L][R-1]-tot[L+1][R-1];
		}
	}
	for(int i=1; i<=n; ++i) {
		for(int j=1; j+i-1<=n; ++j) {
			int L=j,R=i+j-1;
			f[L][R]=max(val(L,R,0)+tot[L+1][R]-f[L+1][R],tot[L][R-1]-f[L][R-1]+val(L,R,1));
		}
	}
	cout<<f[1][n]<<":"<<tot[1][n]-f[1][n];
	return 0;
}

标签:le,return,int,题解,2024,P9911,Kuglice
From: https://www.cnblogs.com/djh0314/p/17984705

相关文章

  • CF1689A题解
    题意简述给定字符串\(a\)和\(b\),每次从\(a\)串或\(b\)串中选出一个字符加入\(c\)串,要求\(c\)串的字典序最小。特别地,在\(c\)串中不能出现连续\(k\)次来源相同的字符。思维路径由于字符是随意选取的,易于发现每次选\(a\)串中字典序最小的字符或者\(b\)串中字......
  • 2024最新iOS17.3微信分身详解分享
    微信是目前最流行的社交软件之一,拥有庞大的用户群体。然而,对于一些需要同时使用多个微信账号的用户来说,使用官方版微信就显得有些不方便。iOS分身微信软件可以解决这个问题,它可以让用户在同一台设备上同时登录多个微信账号,从而实现工作生活两不误。iOS分身微信软件的优势iOS分身微......
  • CF911G Mass Change Queries 题解
    题目链接:CF或者洛谷前置知识点:平衡树合并:CF文章与维基百科看上去这题有很多人用线段树分裂与合并去做,其实这种需要分裂和合并的,我们用文艺平衡树去维护区间信息是最容易写的。考虑本题的特殊性,值域并不是很大,所以其实我们可以为每种值开一棵文艺平衡树,而平衡树维护的值为......
  • [SNOI2024]公交线路 题解
    为啥洛谷现有的题解全是\(O(n^2\logn)\)的做法?给个好写的\(O(n^2)\)做法。感觉这题是这套题中除了D1T1以外最简单的题(显然最远的距离一定由两个叶子贡献,我们拎出一个非叶节点为根,分析一些性质。考虑两个叶子\(u,v\)何时距离\(\le2\),这要求它们所一步能到达的最浅点......
  • 【题解 P4197】 Peaks
    Peaks题目描述在Bytemountains有\(n\)座山峰,每座山峰有他的高度\(h_i\)。有些山峰之间有双向道路相连,共\(m\)条路径,每条路径有一个困难值,这个值越大表示越难走。现在有\(q\)组询问,每组询问询问从点\(v\)开始只经过困难值小于等于\(x\)的路径所能到达的山峰中第\(......
  • 2024-01-24:用go语言,已知一个n*n的01矩阵, 只能通过通过行交换、或者列交换的方式调整矩
    2024-01-24:用go语言,已知一个n*n的01矩阵,只能通过通过行交换、或者列交换的方式调整矩阵,判断这个矩阵的对角线是否能全为1,如果能返回true,不能返回false。我们升级一下:已知一个n*n的01矩阵,只能通过通过行交换、或者列交换的方式调整矩阵,判断这个矩阵的对角线是否能全为1,如果......
  • adb命令补充---20240124
    1、如何查看系统是32位还是64位?adbshellgetpropro.product.cpu.abi---返回设备当前CPU的ABI版本号若结果包含"armv7-a"字样,则说明设备是32位;若结果包含"arm64-v8a"字样,则说明设备是64位。如何检测Android应用是32位还是64位?与32位系统不同的是,在64系统中会同时存在两个Zyg......
  • 【2024-01-23】增肌保养
    20:00是的春天需要你。经常会有一颗星,等着你抬头去看。                                                 ——里尔克这两天挺冷的,不过有了上个月十几天的速冻经验,衣着......
  • 【2024-01-22】回乡所闻
    20:00我的意识中,母亲像一棵树,父亲像一座山。他们教育我很多朴素的为人处世的道理,令我终生受益。我觉得,对于每一个人,父母早期的家教都具有初级的朴素的人文元素。                                    ......
  • 算法模板 v1.3.2.20240124
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......