20210615总结

20210615总结

怎么说呢,体验极差。

一开始看的 T1 ,没想到状压,大概在 7:50 感觉是背包硬算概率,设 \(f[i][j]\) 表示第 \(i\) 个数加成了 \(j\) 的概率。但这玩意没法算答案,因为不知道是什么时候做的,没法处理一个时间两个数都加的冲突。8:30 然后就放了放,去看T2。题解中是用了枚举那些步骤操作了 \(a_i\) ,这样就可以处理了同一个时间不能操作2个数的问题,而且时间 \(m\) 只有 10,很适合状压,一般的状压是对物品数 \(n\) 状压,我以为是按照时间枚举,就是到了时间 \(i\) 每个数的状态,这样假了。

很快想了一个 \(n^4\) 的算法 8:40?,码了很久,大概在9:20?,然后想到能用单调栈优化成 \(n^2\) 的,这个码的很快 9:40左右,拍了 100 组,没拍出来问题,感觉稳了,自闭了。后来被卡成 0 分了,原因:那种处理方法需要有点才能枚举到矩形,可能有些情况需要换一下 \((x,y)\) 才能枚举到那个答案的矩形。干他娘的。

然后去看T3了,woc DDP?怀疑是老师故意出给我的。还有2个小时左右,打算先把递推式写出来,因为DDP要用矩阵乘法,dp式子不能太复杂,就尽量想一些简单的dp,最后实在不行了,打算写一个麻烦的dp,代码大概长这个样子

void dfs(int x)
{
	memset(f[x],-0x3f,sizeof f[x]);
	f[x][1]=0;
	Graph(x){
		dfs(y);
		LL temp=-inf;
		for(int j=1;j<=L;j++)
			temp=max(temp,f[y][j]);
		for(int j=2;j<=L;j++)
			f[x][j]=max(f[x][j],f[y][j-1]-temp);
		f[x][1]+=temp;
	}
	for(int i=2;i<=L;i++)
	f[x][i]+=f[x][1];
	for(int i=1;i<=L;i++)
	f[x][i]+=w[x][i];
}

这玩意写成递推形式好难啊,我是真不会,题解还真这样转换的。

然后我就自闭了,写了个很麻烦的地推形式,矩阵大概 14*14,那么每修改一次大概就是 54880 次运算,然后我就自闭了。只有一直在考虑优化这个矩阵大小,到最后就没了。最后只把暴力交了上去。

反思

想了想,其实对于T3,\(L=2\) 和链的情况的递推式不是很麻烦,没有那么多max啥的,算了一下大概有65分,下回这种T3就不应该硬搞100分的,还是太那啥了,而且能力也不够。

posted @ 2021-06-15 23:52  zYzYzYzYz  阅读(75)  评论(0编辑  收藏  举报