首页 > 其他分享 >[ARC104E] Random LIS

[ARC104E] Random LIS

时间:2024-02-22 12:34:19浏览次数:33  
标签:return ARC104E int res Random len ans LIS mint

题意:数列每个数是在 \([1,a_i]\) 上均匀随机分布的整数,求其最长上升子序列长度的期望,\(n\le 6\)。

发现 \(n\) 很小,考虑 \(O(n^n)\) 枚举所有数的偏序关系,然后设 \(h_i=\min_{rk_j=i} a_j\),\(m=\max_{i=1}^n rk_i\),

这样问题就能转化为数列每个数是 \([1_i,h_i]\) 上均匀随机分布的整数,求 \(h_{1\dots m}\) 单调递增的方案数。

\(n\) 很小,直接暴力 \(n^4\) dp,总时间复杂度 \(O(n^{n+4})\)

const int N = 7;
int n, m, a[N], d[N], e[N], h[N], c[N], g[N], len;
mint f[N][N], ans;
mint C(int n, int m) {
	if(n < m || n < 0 || m < 0) return 0;
	mint res = 1;
	FOR(i, 1, m) res *= n - i + 1;
	FOR(i, 1, m) res /= i;
	return res;
}
bool check() {
	FOR(i, 1, n) e[i] = d[i];
	sort(e + 1, e + n + 1);
	FOR(i, 1, n) if(e[i] - e[i - 1] > 1) return 0;
	return 1;
}
int lis() {
	int res = 0;
	FOR(i, 1, n) g[i] = 0;
	FOR(i, 1, n) {
		FOR(j, 0, i - 1) {
			if(d[j] < d[i]) {
				chmax(g[i], g[j] + 1);
			}
		}
		chmax(res, g[i]);
	}
	return res;
}
void calc() {
	FOR(i, 1, n) h[i] = INF; m = 0;
	FOR(i, 1, n) chmin(h[d[i]], a[i]);
	FOR(i, 1, n) chmax(m, d[i]);
	len = 0;
	c[++len] = 0;
	FOR(i, 1, m) c[++len] = h[i];
	sort(c + 1, c + len + 1);
	len = unique(c + 1, c + len + 1) - c - 1;
	FOR(i, 1, m) h[i] = lower_bound(c + 1, c + len + 1, h[i]) - c;
	FOR(i, 0, n) FOR(j, 0, n + 2) f[i][j] = 0;
	f[0][1] = 1;
	FOR(i, 1, m) {
		FOR(j, 2, h[i]) {
			int l = c[j] - c[j - 1];
			ROF(k, i, 1) {
				if(h[k] < j) break;
				FOR(p, 1, j - 1) {
					f[i][j] += C(l, i - k + 1) * f[k - 1][p];
				}
			}
		}
	}
	mint res = 0;
	FOR(i, 2, len) res += f[m][i];
	ans += res * lis();
}
void dfs(int u) {
	if(u == n + 1) {
		if(check()) calc();
		return;
	}
	FOR(i, 1, n) {
		d[u] = i;
		dfs(u + 1);
	}
}
void solve() {
	cin >> n;
	FOR(i, 1, n) cin >> a[i];
	dfs(1);
	FOR(i, 1, n) ans /= a[i];
	cout << ans << endl;
}

标签:return,ARC104E,int,res,Random,len,ans,LIS,mint
From: https://www.cnblogs.com/kevinlikescoding/p/18027070

相关文章

  • Android家庭记账本开发第五天:ListAdapter适配器的编写
    昨天讲了数据库相关的操作现在来看我们当初在MainActivity的Java文件当中的initData方法:1@SuppressLint("Range")2privatevoidinitData(){3helper=newDBHelper(MainActivity.this);4list=newArrayList<>();5SQLiteDatabasedb=h......
  • mysql: show processlist 详解
    showprocesslist显示的信息都是来自MySQL系统库information_schema中的processlist表。所以使用下面的查询语句可以获得相同的结果:select*frominformation_schema.processlist了解这些基本信息后,下面我们看看查询出来的结果都是什么意思。Id:就是这个线程的唯一标......
  • iframe 使用 postMessage 传递信息,addEventListener监听返回信息,并使用removeEventLis
    BUTTON发送消息selectButton.addEventListener('click',()=>{      iframe.contentWindow.postMessage({        event_id:"select_media",        return_type:'media'      },'*');   ......
  • 3-Redis十大关系之列表List
    Redis十大类型之ListList适用于单key多value的情况。底层是由双端链表组成。LPUSH:LPUSHkeyv1v2v3...从左边插入RPUSH:RPUSHkeyV1V2V3V4V5...从右边插入LRANGEkeystartend:进行遍历,注意不存在RRANGE!LPOP和RPOP:分别是从左边移除一个元素和右边移除一个元素......
  • 为什么在js中需要添加addEventListener()?
    为什么在js中需要添加addEventListener()?1.What?addEventListener(监听器)---EventTarget.addEventListener()方法将指定的监听器注册到EventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以是一个文档上的元素Element、Document和Window,也可以是......
  • 学习笔记#4:树状数组和 LIS
    学习笔记#4:树状数组和LIS前言:树状数组是和线段树类似的数据结构,更确切的说,树状数组能解决的问题,线段树都能解决,而线段树还能解决一些树状数组所不能解决的问题。因此线段树的应用范围比树状数组更广泛。但是,树状数组的常数更小,在同样的\(\text{O}(n\logn)\)复杂度下,树状数......
  • nvm list available 命令执行异常 Could not retrieve https://npm.taobao.org/mirror
    异常:无法连接镜像地址 解决方法在nvm的安装位置找到文件settings.txt,修改镜像地址修改前 修改后保存再次运行命令 ......
  • JavaSE---Random
    java.util.Random概述Aninstanceofthisclassisusedtogenerateastreamofpseudorandomnumbers. Random实例用来生成伪随机数;Theclassusesa48-bitseed,whichismodifiedusingalinearcongruentialformula. (SeeDonaldKnuth,TheArtofComputerPr......
  • Random
    maven<!--https://mvnrepository.com/artifact/org.apache.commons/commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version>......
  • English99
    书写生命的传奇bio---->biography:传奇JohnDryden(1631-1700)autobiography:传记。其中bio:代表:life.graphy:代表:writing.biocytobiology:细胞生物学bioscience:生物科学bioengineering:生物工程bionic:仿生学的biorhythm:生物节律molecularbiology:分子生物学......