题目链接:http://noi.ac/contest/12/problem/37

题目:

小W收到了一张纸带,纸带上有 n个位置。现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色,但是他发现如果某连续 m 个位置被染成了 m 种不同的颜色,那么就不美观,于是他决定让任意的相邻 m 个位置的颜色至少有两个位置相同。他想知道他一共有多少种染色的方案。

输入格式

第一行三个整数 n,m,p。

输出格式

输出一行一个整数,表示答案对 p 取模的结果。

题解:

我们考虑DP,设序列为{a}

dp[i][j]为考虑前i个位置,[i-j+1,i]中的颜色互不相同,并且ai-j与这段区间中的某一个位置颜色相同

我们枚举第i+1个位置和[i-j+1,i]中的哪一个颜色相同或者全部不同,进行转移

dp[i+1][j+1]=dp[i][j]*(m-j)

dp[i+1][k]+=dp[i][j](1<=k<=j)

这样的话时间复杂度是O(N^3)的

发现第二个转移可以前缀和优化一下,显然dp[i+1][k]可以从dp[i][k~(m-1)]转移而来

时间复杂度O(N^2)

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
typedef long long ll;
using std::min;
const int N=+;
int n,m;
ll p;
ll dp[N][N],sum[N][N];
int main()
{
scanf("%d%d%d",&n,&m,&p);
dp[][]=;
for (int i=;i<=n;i++)
{
for (int j=;j<=min(i,m-);j++)
{
(dp[i][j]+=dp[i-][j-]*(m-(j-))%p)%=p;
(dp[i][j]+=sum[i-][j])%=p;
}
for (int j=m-;j>=;j--)
{
sum[i][j]=(sum[i][j+]+dp[i][j])%p;
}
}
ll ans=;
for (int i=;i<m;i++) (ans+=dp[n][i])%=p;
printf("%lld\n",ans);
return ;
}

[NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)的更多相关文章

  1. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  2. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  3. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  4. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  5. 【noi.ac-CSP-S全国模拟赛第三场】#705. mmt

    给定数组a[],b[] 求$$c_i=\sum_{j=1}^{i} a_{\left \lfloor \frac{n}{j} \right \rfloor}·b_{i \bmod j}$$ 大概就是对 ...

  6. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  7. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  8. NOI.AC WC模拟赛

    4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变 ...

  9. NOI2019省选模拟赛 第三场

    传送门 明明没参加过却因为点进去结果狂掉\(rating\)-- \(A\) 集合 如果我们记 \[f_k=\sum_{i=1}^nT^i{n-i\choose k}\] 那么答案显然就是\(f_{k ...

随机推荐

  1. redis主从复制,读写分离

    主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...

  2. Java RTTI(类型信息)(.class 类对象)

    RTTI:Run-Time Type Information,关键词在 Run-Time,运行时的,而非编译期确定的关于类型的信息.运行时的类型信息(RunTime Type Information) ...

  3. 14. Longest Common Prefix[E]最长公共前缀

    题目 Write a function to find the longest common prefix string amongst an array of strings. If there i ...

  4. POJ 3185 DFS

    好像可以用高斯消元??? 但是用搜索写 这题就很水了... // by SiriusRen #include <bitset> #include <cstdio> using ...

  5. 视图 Model转集合

    @{    Layout = null;}@using MvcApplication2.Models <!DOCTYPE html> <html><head>    ...

  6. SQLSERVER 链接服务器

    1. 执行代码 EXEC sp_addlinkedserver @server='XLZFSqlServer', --链接服务器别名 @srvproduct='', @provider='SQLOLE ...

  7. Redis的配置文件详解

    daemonize:如需要在后台运行,把该项的值改为yes pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址 bind:指定redis只接收来自该IP的请求,如 ...

  8. vue-cli搭建项目结构及引用bootstrap

    vue-cli脚手架工具快速构建项目架构: 1.首先默认了有已经安装了node,然后依次执行以下命令: npm install -g vue-cli                   全局安装vue ...

  9. Array.prototype.slice.call(arguments) 通俗法理解

    Array.prototype.slice.call(arguments,num) 能将具有length属性的对象转成数组.   slice 从字面上的意思可以理解为截取数组的一部分. call 从字 ...

  10. Debian下签名无法验证

    又收集到的新方法 gpg --keyserver  subkeys.pgp.net --recv-keys AED4B06F473041FA  && apt-key add /root ...