POJ-3734 Blocks

来源:互联网 发布:八孔竖笛淘宝 编辑:程序博客网 时间:2024/05/16 01:59

题目大意:

有n个blocks,让你用红,蓝,绿,黄四种颜色染上色,其中红色和绿色的block都是偶数个的方案有多少个。

解题思路:

其实这是个DP...啊一脸狗血...

其实模型很像这题....HDU 1143 Tri Tiling

首先,假设dp[i][0]表示当涂了前i个blocks之后,红色和绿色都是偶数个的方案个数,dp[i][1]表示当涂了前i个blocks之后,红色和绿色只有一个是偶数个的方案个数,dp[i][2]表示当涂了前i个blocks之后,红色和绿色都不是偶数个的方案个数

那么状态转移为:

dp[i+1][0] = 2 * dp[i][0] + dp[i][1] 

表示涂了前i+1个之后红色和绿色都是偶数个,那么前i个可以是红色和绿色都是偶数个,第i+1个选择蓝色或黄色,或者前i个是红色和绿色有一个是偶数个,那么第i+1个选择为不是偶数个的那一个。

以此类推。得出所有的状态转移:

dp[i+1][0] = 2 * dp[i][0] + dp[i][1]

dp[i+1][1] = 2 * dp[i][0] + 2 * dp[i][1] + 2 * dp[i][2]

dp[i+1][2] = dp[i][1] + 2 * dp[i][2]

如果你以为就这么结束那真是亦可赛艇...这题关键在于n数量级极大,即使你用滚动数组去维护依旧无法拜托超时的厄运。所以需要加速。

于是矩阵快速幂诞生了。(xjb扯的

怎么转换矩阵快速幂可以参考斐波那契数列...

代码:

#include <cstdio>#include <cstring>using namespace std;const int mod = 10007;typedef struct node {int mat[4][4];node() { memset(mat, 0, sizeof(mat)); }}Matrix;Matrix operator * (Matrix a, Matrix b) {Matrix ans;for (int i = 0; i < 3; ++i)for (int j = 0; j < 3; ++j)for (int k = 0; k < 3; ++k)ans.mat[i][j] = (ans.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % mod;return ans;}Matrix operator ^ (Matrix a, int num) {Matrix ans;for (int i = 0; i < 3; ++i) ans.mat[i][i] = 1;while (num) {if (num & 1) ans = ans * a;a = a * a;num >>= 1;}return ans;}int main() {int n, t;scanf("%d", &t);while (t--) {Matrix m;scanf("%d", &n);m.mat[0][0] = 2; m.mat[0][1] = 1; m.mat[0][2] = 0;m.mat[1][0] = 2; m.mat[1][1] = 2; m.mat[1][2] = 2;m.mat[2][0] = 0; m.mat[2][1] = 1; m.mat[2][2] = 2;m = m ^ n;printf("%d\n", m.mat[0][0]);}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 投诉申通没用怎么办 领导作风有问题怎么办 做完火疗受风了难受怎么办 鼻子做的不好看怎么办 埋线双眼皮出血怎么办 割完双眼皮出血怎么办 全切双眼皮出血怎么办 割双眼皮出血了怎么办 割双眼皮后出血怎么办 双眼皮手术后出血怎么办 缝双眼皮开了怎么办 朋友网没了怎么办 压疮发生后怎么办 学籍账号已登录怎么办 护士学分不达标怎么办 高中学籍错了怎么办 定时器时间太短不够用怎么办? 考试时间不够用怎么办 感觉时间不够用怎么办 学习时间不够用怎么办 天天时间不够用怎么办 网贷骚扰通讯录怎么办 老被电话骚扰怎么办 对付广场舞噪音怎么办 普法平台考试不及格怎么办 假疫苗事件孩子怎么办 网上办生育证怎么办? 新生儿足跟血筛查没通过怎么办 新生儿听力筛查未通过怎么办 医药代表业绩差怎么办 网站诈骗被骗了怎么办 网贷利息过高怎么办 麦粒肿脓包不破怎么办 处方单丢了怎么办 深圳社保转外省怎么办 单位退休后医保怎么办 鼓楼医院就诊卡怎么办 2017个体户怎么办环评 查环保停工工人怎么办 林地己建房了怎么办 交不起环保罚款怎么办