description

赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= =

现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍。赫克托有K桶颜色各不相同的油漆,第i桶油漆恰好可以粉刷Ci根石柱,并且,C1+C2+C3…CK=N(即粉刷N根石柱正好用完所有的油漆)。长老为了刁难赫克托,要求相邻的石柱颜色不能相同。

喜欢思考的赫克托不仅没有立刻开始粉刷,反而开始琢磨一些奇怪的问题,比如,一共有多少种粉刷的方案?

为了让赫克托尽快开始粉刷,请你尽快告诉他答案。


analysis

  • 一道很好的DPDPDP

  • 设f[i][j]f[i][j]f[i][j]表示填到第iii种颜色、有jjj个非法空的方案数

  • 合法空即空格两边颜色不同,非法空则相同,设sumsumsum为当前空的个数

  • 枚举当前a[i]a[i]a[i]个颜色放入kkk个非法空,lll个合法空

  • jjj个里放入了kkk个非法空那么j−kj-kj−k,剩下a[i]−k−la[i]-k-la[i]−k−l个放到哪里都会产生新非法空

  • 可知f[i−1][j]f[i-1][j]f[i−1][j]会转移到f[i][j+a[i]−2k−l]f[i][j+a[i]-2k-l]f[i][j+a[i]−2k−l]

  • 因为a[i]a[i]a[i]个颜色插到k+lk+lk+l个空里,由插板法知有Ca[i]−1k+l−1C^{k+l-1}_{a[i]-1}Ca[i]−1k+l−1​种方案

  • 因为jjj个非法空要选择kkk个非法空,所以有CjkC^{k}_{j}Cjk​种方案

  • 因为sum−jsum-jsum−j个合法空要选择lll个合法空,所以有Csum−jlC_{sum-j}^{l}Csum−jl​种方案

  • 由于数的最左最右边都有空,所以sum=∑ia[i]+1sum=\sum_{i}a[i]+1sum=∑i​a[i]+1,最后f[n][0]f[n][0]f[n][0]即为答案

  • 下次遇到较难的题,多想DPDPDP,多打草稿,不要怕麻烦


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define mod 1000000007
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)using namespace std;ll C[105][105],f[25][105];
ll a[20];
ll n,T,sum;inline ll read()
{ll x=0,f=1;char ch=getchar();while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;
}
int main()
{freopen("T3.in","r",stdin);C[0][0]=1;fo(i,1,100){C[i][0]=1;fo(j,1,i)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;}T=read();while (T--){memset(a,0,sizeof(a));memset(f,0,sizeof(f));n=read(),f[0][0]=1,sum=0;fo(i,1,n)a[i]=read();fo(i,1,n){fo(j,0,sum+1)fo(k,0,min(j,a[i]))fo(l,0,min(a[i]-k,sum-j+1))if (k+l)(f[i][j+a[i]-2*k-l]+=(((f[i-1][j]*C[a[i]-1][k+l-1])%mod*C[j][k])%mod*C[sum-j+1][l])%mod)%=mod;sum+=a[i];}printf("%lld\n",f[n][0]);}return 0;
}

【JZOJ3424】粉刷匠相关推荐

  1. jzoj3424. 【NOIP2013模拟】粉刷匠

    Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不相同的油漆,第i ...

  2. BZOJ1296:[SCOI2009]粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2038  Solved: 1182 [Submit][Sta ...

  3. 【NOIP2013模拟】粉刷匠 题解代码

    原题 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不相同的油漆 ...

  4. BZOJ 1296: [SCOI2009]粉刷匠( dp )

    dp[ i ][ j ] = max( dp[ i - 1 ][ k ] + w[ i ][ j - k ] )  ( 0 <= k <= j ) 表示前 i 行用了 j 次粉刷的机会能正 ...

  5. bzoj 1296: [SCOI2009]粉刷匠(DP+DP)

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2339  Solved: 1348 [Submit][Sta ...

  6. [SCOI2009]粉刷匠 DP)

    [SCOI2009]粉刷匠 题目描述: windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上 ...

  7. [洛谷P4158][SCOI2009]粉刷匠(动态规划)

    [洛谷P4158][SCOI2009]粉刷匠(动态规划) 题目描述 输入描述 输出描述 示例 输入 输出 题目思路 代码 欢迎关注微信公众号:Java后台开发 题目描述 windy有 N 条木板需要被 ...

  8. [SCOI2009]粉刷匠 牛客DP入门

    0x00 题目来源 [SCOI2009]粉刷匠 0x10 Tag 线性DP.区间DP 0x20 题目描述 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色'0' ...

  9. 【NOIP2013模拟】粉刷匠

    文章目录 题目 分析 代码 题目 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有NNN根排列成一直线的石柱,从111到NNN标号,长老要求用油漆将这些石柱重新 ...

  10. bzoj1296【SCOI2009】粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 1479   Solved: 837 [ Submit][ ...

最新文章

  1. Linux软件的安装,更新与卸载
  2. 5G将改变技术格局的8个原因(上)
  3. [转载] 中华典故故事(孙刚)——07 二百五
  4. n阶换方c语言程序,求单偶阶与双偶阶幻方编程思想及其算法!
  5. 2021年,推荐你使用.NET 5的7大原因
  6. 开源的“底线”在哪里?
  7. 函数——C++的编程模块
  8. 浅谈JVM中如何自动回收内存
  9. 教你定时爬取微博热搜榜并做动态数据展示,让你不错过任何一个吃瓜热点
  10. php调用pdf虚拟打印机,电脑中怎么安装pdf虚拟打印机
  11. P2P中DHT网络介绍
  12. 谷歌flash无法输入中文
  13. 如何用TC群控系统同时控制上百台手机
  14. svn的图标突然不显示了
  15. 交易开拓者-附录二:函数速查
  16. 超级鹰解决点触验证码
  17. PHP Yii框架之表单验证规则大全
  18. TMT行业有7个子行业
  19. 测试手机速度的软件叫什么,手机测网速哪个软件好? 精确测速软件推荐
  20. c语言期末大作业报告,c语言大作业报告.docx

热门文章

  1. 王之泰201771010131《面向对象程序设计(java)》第八周学习总结
  2. 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
  3. R中rank函数使用
  4. EXCEL中数据分析涉及的一些操作
  5. 智齿徐懿 | 一个“外行”眼中的呼叫中心系统未来
  6. app第三方支付测试点
  7. [dataTables使用的坑]requested unknown parameter 'XXX' for row xx, column xx
  8. BEC听力训练 方法2
  9. Facebook_scraper:Python获取FB用户的公开发帖【FaceBook系列 一】
  10. 裸辞自学java和报培训班_程序员:裸辞十多天,不敢告诉家里人,假装每天上班,安静地成长...