lightoj 1244 - Tiles 状态DP
思路:状态DP
dp[i]=2*dp[i-1]+dp[i-3]
代码如下:
求出循环节部分
1 #include<stdio.h>
2 #define m 10007
3 int p[m];
4 int main()
5 {
6 p[0]=p[1]=1;p[2]=2;
7 for(int i=3;i<m;i++){
8 p[i]=2*p[i-1]+p[i-3];
9 p[i]%=m;
10 }
11 int t,ca=0,n;
12 scanf("%d",&t);
13 while(t--){
14 scanf("%d",&n);
15 printf("Case %d: %d\n",++ca,p[n%(m-1)]);
16 }
17 return 0;
18 }
用矩阵快速幂求
1 #include<stdio.h>
2 #include<cstring>
3 #define mod 10007
4 struct mat
5 {
6 int m[3][3];
7 }e,d;
8 int an[3]={2,1,1};
9 mat Mul(mat a,mat b)
10 {
11 mat ans;
12 for(int i=0;i<3;i++)
13 for(int j=0;j<3;j++){
14 ans.m[i][j]=0;
15 for(int k=0;k<3;k++)
16 ans.m[i][j]+=a.m[i][k]*b.m[k][j];
17 ans.m[i][j]%=mod;
18 }
19 return ans;
20 }
21 int Pow(int n)
22 {
23 mat ans=e,a=d;
24 while(n){
25 if(n&1) ans=Mul(ans,a);
26 n>>=1;
27 a=Mul(a,a);
28 }
29 return ans.m[0][0];
30 }
31 int main()
32 {
33 memset(e.m,0,sizeof(e.m));
34 memset(d.m,0,sizeof(d.m));
35 for(int i=0;i<3;i++) e.m[0][i]=an[i];
36 d.m[0][1]=d.m[1][2]=d.m[2][0]=1;
37 d.m[0][0]=2;
38 int t,n,ca=0;
39 scanf("%d",&t);
40 while(t--){
41 scanf("%d",&n);
42 printf("Case %d: ",++ca);
43 if(n==1) printf("1\n");
44 else printf("%d\n",Pow(n-2));
45 }
46 return 0;
47 }
lightoj 1244 - Tiles 状态DP的更多相关文章
- LightOJ 1244 - Tiles 猜递推+矩阵快速幂
http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...
- hdu 4614 pieces 状态DP
题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:htt ...
- hdu 4778 Gems Fight! 博弈+状态dp+搜索
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...
- POJ 3254 压缩状态DP
题意:一个矩形网格,可以填0或1, 但有些位置什么数都不能填,要求相邻两个不同时为1,有多少种填法.矩形大小最大 12*12. 压缩状态DP大多有一个可行的state的范围,先求出这个state范围, ...
- 【状态DP】 HDU 1074 Doing Homework
原题直通车:HDU 1074 Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样 ...
- Hdu 4539 【状态DP】.cpp
题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...
- hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...
- hdu 5135(2014广州—状态dp)
t题意:给你n条边,构造任意个三角形,一个三角形恰好只用3条边,每条边只能一次,求面积最大值 思路: 最开始想的是先排序从大到小取,但感觉并不怎么靠谱. 最多12条边,所以可以求出所有可能的三角形面积 ...
- Hdu 3001 Travelling 状态DP
题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进 ...
随机推荐
- 自定义ToolBar
一.Toolbar的简介 Toolbar 是 android 5.0 引入的一个新控件,Toolbar出现之前,我们很多时候都是使用ActionBar以及ActionActivity实现顶部导航栏的, ...
- Android中TextView设置字体
最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求; 度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使 ...
- Spring Cloud Netflix之Eureka 相关概念
为什么不应该使用ZooKeeper做服务发现 英文链接:Eureka! Why You Shouldn’t Use ZooKeeper for Service Discovery:http://www ...
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...
- Python参数输入模块-optparse
废话: 模块名是optparse, 很多人打成optparser.以至于我一直导入导入不了.搞的不知所以. 模块的使用: import optparse #usage 定义的是使用方法,%prog 表 ...
- python—RE正则表达式
re正则表达式 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的 ...
- CSS浮动和清除
float:让元素浮动,取值:left(左浮动).right(右浮动) clear:清除浮动,取值:left(清除左浮动).right(清除右浮动).both(同时清除上面的左浮动和右浮动) 1.CS ...
- ARM linux的启动部分源代码简略分析【转】
转自:http://www.cnblogs.com/armlinux/archive/2011/11/07/2396784.html ARM linux的启动部分源代码简略分析 以友善之臂的mini2 ...
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 数据结 ...
- CF1064 E - Dwarves, Hats and Extrasensory Abilities
题意 交互题, 本来应该是在平面上进行的. 实际上换成一条直线就可以, 其实换成在平面上更复杂一些. Solution 假设\(l\)点是黑点, \(r\)处是白点, 那么就把下一个点的位置放置在\( ...