题目链接

题意

有个长度为\(m\)公分的布,要在上面每公分都染上颜色,整块布染恰好\(n(n=m)\)种颜色。颜色标号从\(1\)到\(n\)。染色需遵循:

1.从颜色\(1\)到颜色\(n\)依次,即必须先染标号小的颜色

2.每次可以染任意一个区间,但必须满足这个区间之前的颜色是相同的。

询问将这块布染成所给颜色的方案数。

solution

区间\(dp\)。

\(f[l][r]\)表示染好\([l,r]\)这个区间的方案数。\(g[l][r]\)表示最小的颜色最后单独染的方案数。

所以就有\(g[l][r] = f[l][t-1] \times f[t+1][r]\),(\(a[t]\)为区间\([l,r]\)中的最小值)

然后枚举一个\(k\)表示\([l,k]\)全染成最小颜色值的方案数。

那么就有\(f[i][j]=\sum\limits_{k=l}^{r-1}g[l][k]\times f[k+1][r]\)

最后\(f[1][n]\)即为答案。

code

/*
* @Author: wxyww
* @Date: 2019-07-21 09:01:13
* @Last Modified time: 2019-07-21 10:48:02
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 510,mod = 998244353;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int a[N],f[N][N],g[N][N];
int main() {
int n = read(),m = read();
for(int i = 1;i <= n;++i) a[i] = read();
a[0] = 1e9;
for(int i = 1;i <= n + 1;++i) g[i][i] = f[i][i] = f[i][i - 1] = g[i][i - 1] = 1;
for(int len = 2;len <= n;++len) {
for(int l = 1;l + len - 1 <= n;++l) {
int r = l + len - 1,t = 0;
for(int k = l;k <= r;++k) if(a[k] < a[t]) t = k;
f[l][r] = g[l][r] = 1ll * f[l][t - 1] * f[t + 1][r] % mod; for(int k = l;k < r;++k) {
f[l][r] = (f[l][r] + 1ll * g[l][k] * f[k + 1][r] % mod) % mod;
}
}
}
cout<<f[1][n];
return 0;
}

CF1178 F1 Short Colorful Strip的更多相关文章

  1. CF1178F Short/Long Colorful Strip(DP)

    说起来,这题好像也不难-- 先考虑 F1 怎么做. 既然别的方法都不行不如试试\(f_{i,j}\) 表示在刚刚准备开始涂 \([i,j]\) 中最小编号的颜色之前,整个区间是同色的,且最后能做到 \ ...

  2. Codeforces 1178F2. Long Colorful Strip

    传送门 首先涂区间,那么区间最多有 $2n$ 个相邻位置不同的情况,并且连续相同的颜色可以合并起来 那么这样操作完以后,区间长度最多为 $2n$ 发现涂完一段区间以后其他的操作都不能出现一边在区间内而 ...

  3. Codeforces Global Round 4

    目录 Contest Info Solutions A. Prime Minister B. WOW Factor C. Tiles D. Prime Graph E. Archaeology F1. ...

  4. 在树莓派上用 python 做一个炫酷的天气预报

    教大家如何在树莓派上自己动手做一个天气预报.此次教程需要大家有一定的python 基础,没有也没关系,文末我会放出我已写好的代码供大家下载. 首先在开始之前 需要申请高德地图API,去高德地图官网注册 ...

  5. MySQL碎碎念

    1. 如何修改Mysql的用户密码 mysql> update mysql.user set password=password('hello') where user='root'; mysq ...

  6. Python3.5 day4作业:对员工信息文件,实现增删改查操作。

    需求: 1.可进行模糊查询,语法至少支持下面3种: 1.select name,age from staff_table where age > 22 2.select  * from staf ...

  7. HAproxy配置文件操作

    要求 1. 根据用户输入输出对应的backend下的server信息2. 可添加backend 和sever信息3. 可修改backend 和sever信息4. 可删除backend 和sever信息 ...

  8. Java编程思想——初始化与清理

    PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化   虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...

  9. TIJ读书笔记04-方法重载

    TIJ读书笔记04-方法重载 为什么会有方法重载 方法签名 如何区分重载 关于基本类型的重载 为什么会有方法重载 OOP的编程方式就是让程序的逻辑更加接近现实世界的逻辑. 而在现实世界中,自然语言本身 ...

随机推荐

  1. neo4j 初级使用笔记

    linux下载: curl -O https://neo4j.com/artifact.php?name=neo4j-community-3.5.6-unix.tar.gz 配置端口: baidu h ...

  2. 基于Django的Rest Framework框架的视图组件

    本文目录 一 基本视图 二 mixin类和generice类编写视图 三 使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView 四 使用 ...

  3. 基于Node 的http转发demo,项目中请使用express+http-proxy-middleware

    var http = require("http"); var data = ''; function getData() { const options = { host: 'w ...

  4. Visual Studio 2019 16.1 使用 .NET Core 3.0

    一.前言 早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性,现如今 .NET Core 3.0 预览版已经出来第五个预览版了,从 .NET Core 2. ...

  5. 常用的js、java编码解码方法

    前言 前后端直接传输数据进行交互不就行了吗,为什么还要进行编码解码?正常情况下直接交互没问题,但当有类似以下情况出现时就需要进行编码再进行传输: 1.编码格式难以统一,导致数据交互过程出现中文乱码等问 ...

  6. Caused by: org.springframework.data.mapping.PropertyReferenceException: No property id found for type Users!

    Spring Data JPA自定义Repository Caused by: org.springframework.data.mapping.PropertyReferenceException: ...

  7. java基础(19):List、Set

    1. List接口 我们掌握了Collection接口的使用后,再来看看Collection接口中的子类,他们都具备那些特性呢? 接下来,我们一起学习Collection中的常用几个子类(List集合 ...

  8. Python爬取620首虾米歌曲,揭秘五月天为什么狂吸粉?!

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: CDA数据分析师 PS:如有需要Python学习资料的小伙伴可以加点 ...

  9. MySQL学习——约束

    MySQL学习——约束 摘要:本文主要学习了数据库的约束. primary key(主键) 定义 主键约束是一个列或者多个列,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可以强制 ...

  10. windows linux 子系统及windows terminal的使用。

    windows linux 子系统及windows terminal的使用. windows linux (wsl) 其实windows早就为我们准备好了子系统,但是我们的应用商店经常挂掉.因此都用不 ...