bzoj1079: [SCOI2008]着色方案】的更多相关文章

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1079 题目概括 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案. 题解 一开始想状压dp,压每种颜色的剩余数. 发现要超时. 访问了hzwer大佬的博客,立刻恍然大悟. 我们可以压每种剩余数的颜色个…
题目描述 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案. 分析 很多网上的题解都讲的不怎么清楚,我将个人思考到一发WAAC的过程清楚地讲一遍. 首先考虑如何定义状态,一眼就发现了\(c_i<=5\),说明什么,我们可以直接将各个颜色还剩下多少的个数都压到状态中,也就是一个五维的状态.而且题目很明显的发…
Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两 个相邻木块颜色不同的着色方案. Input 第一行为一个正整数k,第二行包含k个整数c1, c2, ... , ck. Output 输出一个整数,即方案总数模1,000,000,007的结果. Sample Input 3 1 2 3 Sample O…
题目 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两 个相邻木块颜色不同的着色方案. 输入格式 第一行为一个正整数k,第二行包含k个整数c1, c2, - , ck. 输出格式 输出一个整数,即方案总数模1,000,000,007的结果. 输入样例 3 1 2 3 输出样例 10 提示 100%的数据满足:1 <= k <=…
题意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两 个相邻木块颜色不同的着色方案. 题解:写爆搜妥妥的tle 但是看一眼dp数组应该就秒懂了... 还能涂一个的颜色有几种 还能涂两个的颜色剩几种.... 就是一个ez的记忆化搜索了 总结:感觉这道题还是挺套路的 直接爆搜是不行的 但是发现有许多状态其实是一样的 比如当前还剩…
传送门 dp妙题. f[a][b][c][d][e][last]f[a][b][c][d][e][last]f[a][b][c][d][e][last]表示还剩下aaa个可以用一次的,还剩下bbb个可以用两次的,还剩下ccc个可以用三次的,还剩下eee个可以用四次的,还剩下ddd个可以用五次的时候的方案数. 再次强调:状态真是妙啊. 注意到如果这次选可以用i次的,上一次选的是可以用i+1次的这一次的转移系数要减1. 因为上一次那种可以用i+1i+1i+1次的这一次只能用iii次了,所以转移时不能…
$有a_{1}个1,a_{2}个2,...,a_{n}个n(n<=15,a_{n}<=5),求排成一列相邻位不相同的方案数.$ 关于这题的教训记录: 学会对于复杂的影响分开计,善于发现整体变化,用整体法(没错就是和物理那种差不多). 推dp方程时怕边界问题不好处理时可以采用向前推的方法,就如$f[x]=f[i]+...$,可以(部分)避免越界. 我好菜啊..除了个dp状态设计对了其他什么都没写上来qwq.基于每次插入时数字的数量都不固定,所以我可以设法将其固定下来.按顺序依次插入1,2,3,.…
dp.以上次染色时用的颜色的数量和每种数量所含有的颜色作状态. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ; ][][][][][]; ]; int k; long long dfs(int x,int a,int b,int c,int d,int e) { long long &res = f[x][a][b][c][d][e]; ) return…
#include<cstring> #include<cstdio> using namespace std; #define MOD 1000000007 typedef long long ll; ll F[16][16][16][16][16][6]; ll f(int a,int b,int c,int d,int e,int pre) { if(F[a][b][c][d][e][pre]!=-1) return F[a][b][c][d][e][pre]; if((!a)…
ci<=5直接想到的就是5维dp了...dp方程YY起来很好玩...写成记忆化搜索比较容易 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #…