CF 1178 F1

news/2024/8/26 15:31:49 标签: 笛卡尔树

题意:n个格子,编号1~n,n种颜色的油漆 ,编号1~n,每次依次选第i种颜色并将一段区间内全部涂成颜色i,区间内颜色被覆盖,可以涂色的前提是这一区间是相同的颜色,所以你可以认为最初n个格子全是白色。问有多少种涂色方式形成最终的颜色分布。

思路:笛卡尔树DP

从小到大操作,对于一个1他染的染色可能是红色的一段,所以可以分成左右两段分开考虑,最后乘起来即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=b;i>=a;i--)
using namespace std;
#define ll long long
const int N=3e5+5;
const int mod = 998244353;
int dp[510][510],a[510],n,m;
int sum(int a, int b) {
    int s = (a + b);
    if (s >= mod) s -= mod;
    return s;
}
int sub(int a, int b) {
    int s = a - b;
    if (s < 0) s += mod;
    return s;
}
int mult(int a, int b) {
    return (1LL * a * b) % mod;
}
ll rd()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int solve(int l,int r)
{
	if(dp[l][r]) return dp[l][r];
	if(l>=r) return 1;
	int lowi=l;
	rep(i,l+1,r) if(a[lowi]>a[i]) lowi=i;
	int totl=0,totr=0;
	rep(i,l,lowi) totl=sum(totl,mult(solve(l,i-1),solve(i,lowi-1)));
	rep(i,lowi,r) totr=sum(totr,mult(solve(lowi+1,i),solve(i+1,r)));
	return dp[l][r]=1ll*totl*totr%mod;
}
int main()
{
	n=rd();m=rd();
	rep(i,1,n) a[i]=rd();
	printf("%d\n",solve(1,n)); 
} 

 

 


http://www.niftyadmin.cn/n/943256.html

相关文章

17年广东省赛——C,Stokpie(思维)

Call对应函数式&#xff1a;KX-PX-C Put对应函数式&#xff1a;PX-KX-C 分析&#xff1a; 1.建立一个结构体&#xff0c;存储类型type&#xff08;Call或Put&#xff09;&#xff0c;以及C,P,K。 2.输入完后&#xff0c;按P进行从小到大排序。 3.排完序后&#xff0c;每个区间段…

BZOJ 4244 邮戳拉力赛

题意&#xff1a; 思路&#xff1a; 参考博客 https://blog.csdn.net/forever_shi/article/details/84931438 /**************************************************************Problem: 4244User: fufckLanguage: CResult: AcceptedTime:8364 msMemory:72076 kb *********…

bzoj 1066: [SCOI2007]蜥蜴

Description 在一个r行c列的网格地图中有一些高度不同的石柱&#xff0c;一些石柱上站着一些蜥蜴&#xff0c;你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1&#xff0c;蜥蜴的跳跃距离是d&#xff0c;即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石…

组合数的一些模板(好用)

一、 ll qpow(ll a,ll b,ll p) {ll ret1;a%p;while(b){if(b&1) retret*a%p;b/2;aa*a%p;}return ret; } 二、Lucas ll lucas(ll n,ll m,ll p) {if(m0) return 1;return C(n%p,m%p,p)*lucas(n/p,m/p,p)%p; } 三、C(n,m) 方案一&#xff1a;&#xff08;直接算&#xff0…

bzoj 1934: [Shoi2007]Vote 善意的投票

Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉。对他们来说&#xff0c;这个问题并不是很重要&#xff0c;于是他们决定发扬谦让精神。虽然每个人都有自己的主见&#xff0c;但是为了照顾一下自己朋友的想法&#xff0c;他们也可以投和自己本来意愿相反的票。我…

bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑

Description FJ的N(2 < N < 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目。至于进行接力跑的地点 自然是在牧场中现有的T(2 < T < 100)条跑道上。 农场上的跑道有一些交汇点&#xff0c;每条跑道都连结了两个不同的交汇点 I1_i和I2_i(1 < I1_i < 1,0…

杭电ACM——1247,Hat’s Words(Trie树)

这道题是有问题的&#xff0c;一个单词是可以被另外一个单词拼接两次得到的&#xff0c;如ab&#xff0c;abab&#xff0c;输出是abab&#xff0c;然而原题确指明&#xff0c;某个单词当且仅当是另外字典里的两个单词拼接的&#xff0c;才是一个hat’s word&#xff0c;实际上这…

bzoj 1001: [BeiJing2006]狼抓兔子

Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到&#xff0c;但抓兔子还是比较在行的&#xff0c;而且现在的兔子还比较笨&#xff0c;它们只有两个窝&#xff0c;现在你做为狼王&#xff0c;面对下面这样一个网格的地形&#xff1a; 左上角点…