1079

思路:

  dp;

  我们如果dp方程为15维,每维记录颜色还有多少种;

  不仅tle,mle,它还re;

  所以,我们压缩一下dp方程;

  方程有6维,第i维记录有多少种颜色还剩下i次;

  最后还要记录上次使用是第几维;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define ll long long
#define mod 1000000007 ll n,m[],sum,ai[],dp[][][][][][]; bool if_[][][][][][]; ll dfs(ll a,ll b,ll c,ll d,ll e,ll f)
{
if(a<||b<||c<||d<||e<) return ;
if(a+b+c+d+e>sum) return ;
if(a>m[]||b>m[]||c>m[]||d>m[]||e>m[]) return ;
if(if_[a][b][c][d][e][f]) return dp[a][b][c][d][e][f];
if_[a][b][c][d][e][f]=true;
ll now=;
if(f==)
{
now+=dfs(a,b,c,d,e+,)*(e+);
now+=dfs(a,b,c,d,e+,)*(e+);
now+=dfs(a,b,c,d,e+,)*e;
now+=dfs(a,b,c,d,e+,)*(e+);
now+=dfs(a,b,c,d,e+,)*(e+);
now+=dfs(a,b,c,d,e+,)*(e+);
}
else if(f==)
{
now+=dfs(a,b,c,d+,e-,)*(d+);
now+=dfs(a,b,c,d+,e-,)*(d+);
now+=dfs(a,b,c,d+,e-,)*(d+);
now+=dfs(a,b,c,d+,e-,)*d;
now+=dfs(a,b,c,d+,e-,)*(d+);
now+=dfs(a,b,c,d+,e-,)*(d+);
}
else if(f==)
{
now+=dfs(a,b,c+,d-,e,)*(c+);
now+=dfs(a,b,c+,d-,e,)*(c+);
now+=dfs(a,b,c+,d-,e,)*(c+);
now+=dfs(a,b,c+,d-,e,)*(c+);
now+=dfs(a,b,c+,d-,e,)*c;
now+=dfs(a,b,c+,d-,e,)*(c+);
}
else if(f==)
{
now+=dfs(a,b+,c-,d,e,)*(b+);
now+=dfs(a,b+,c-,d,e,)*(b+);
now+=dfs(a,b+,c-,d,e,)*(b+);
now+=dfs(a,b+,c-,d,e,)*(b+);
now+=dfs(a,b+,c-,d,e,)*(b+);
now+=dfs(a,b+,c-,d,e,)*b;
}
else if(f==)
{
now+=dfs(a+,b-,c,d,e,)*(a+);
now+=dfs(a+,b-,c,d,e,)*(a+);
now+=dfs(a+,b-,c,d,e,)*(a+);
now+=dfs(a+,b-,c,d,e,)*(a+);
now+=dfs(a+,b-,c,d,e,)*(a+);
now+=dfs(a+,b-,c,d,e,)*(a+);
}
now%=mod;
dp[a][b][c][d][e][f]=now;
// printf("%d %d %d %d %d %d %lld\n",a,b,c,d,e,f,now);
return now;
} int main()
{
// freopen("color.in","r",stdin);
// freopen("color.out","w",stdout);
cin>>n;ll pos;
for(ll i=;i<=n;i++)
{
cin>>pos;
ai[pos]++;
}
for(ll i=;i<=;i++)
{
for(ll j=i;j<=;j++) m[i]+=ai[j];
sum+=ai[i];
}
dp[ai[]][ai[]][ai[]][ai[]][ai[]][]=;
if_[ai[]][ai[]][ai[]][ai[]][ai[]][]=true;
cout<<dfs(,,,,,);
return ;
}

AC日记——[SCOI2008] 着色方案 bzoj 1079的更多相关文章

  1. BZOJ 1079: [SCOI2008]着色方案 记忆化搜索

    1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  2. bzoj 1079: [SCOI2008]着色方案 DP

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 803  Solved: 512[Submit][Status ...

  3. bzoj1079: [SCOI2008]着色方案

    ci<=5直接想到的就是5维dp了...dp方程YY起来很好玩...写成记忆化搜索比较容易 #include<cstdio> #include<cstring> #inc ...

  4. [SCOI2008]着色方案

    1079: [SCOI2008]着色方案 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2228  Solved: 1353[Submit][Stat ...

  5. [SCOI2008] 着色方案[高维dp]

    321. [SCOI2008] 着色方案 ★★★   输入文件:color.in   输出文件:color.out   简单对比时间限制:1 s   内存限制:64 MB 题目背景: 有n个木块排成一 ...

  6. BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)

    BZOJ 1079: [SCOI2008]着色方案(巧妙的dp) 题意:有\(n\)个木块排成一行,从左到右依次编号为\(1\)~\(n\).你有\(k\)种颜色的油漆,其中第\(i\)种颜色的油漆足 ...

  7. 【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1079 只能想到5^15的做法...........................果然我太弱. 其实 ...

  8. 【BZOJ 1079】[SCOI2008]着色方案

    Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木 ...

  9. [luogu2476][bzoj1079][SCOI2008]着色方案【动态规划】

    题目描述 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难 ...

随机推荐

  1. Android保持屏幕常亮唤醒状态

    第一步:  首先添加权限: <uses-permission android:name="android.permission.WAKE_LOCK"></uses ...

  2. 《Cracking the Coding Interview》——第9章:递归和动态规划——题目11

    2014-03-21 20:20 题目:给定一个只包含‘0’.‘1’.‘|’.‘&’.‘^’的布尔表达式,和一个期望的结果(0或者1).如果允许你用自由地给这个表达式加括号来控制运算的顺序,问 ...

  3. python学习笔记六:内置函数

    一.数学相关 1.绝对值:abs(-1) 2.最大最小值:max([1,2,3]).min([1,2,3]) 3.序列长度:len('abc').len([1,2,3]).len((1,2,3)) 4 ...

  4. 去掉referer信息

    <iframe src="auto-refresh.html" width=500 height=500 rel="noreferrer">< ...

  5. day06_08 字符串

    1.0 双引号和单引号的区别 a = "Let's go" print(a) #>>>Let's go 2.0 重复输出字符串* print('hello'*2) ...

  6. 第三方库的安装:Pangolin

    Pangolin: 一款开源的OPENGL显示库,可以用来视频显示.而且开发容易. 代码我们可以从Github 进行下载:https://github.com/stevenlovegrove/Pang ...

  7. Android之SQLite总结

    SQLite 是一个轻量级的数据库,常用于各种嵌入式设备当中.android 提供了SQLiteOpenHelper的抽象类用于帮助开发数据库.在实际使用中经常定义一个类继承SQLiteOpenHel ...

  8. URAL 1732. Ministry of Truth ( KMP 多模式串匹配 )

    问在第一个串中删掉几个字符能否得到第二个串.注意在第二个串中不连续的单词在第一个串中也必须不连续. 一组数据: Input: abababbbbababbb aba ab Output: I HAVE ...

  9. SQL查询oracle的nclob字段

    使用CONTAINS关键字查询NCLOB字段 SELECT  FORMATTED_MESSAGE    FROM     TBL_LOG WHERE     CONTAINS(FORMATTED_ME ...

  10. CentOS程序 开机启动设置与chkconfig命令学习

    CentOS设置程序开机启动的方法: 1.启动命令添加到/etc/rc.d/rc.local 文件中, 如: vim /etc/rc.d/rc.local #!/bin/sh # # This scr ...