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的状态按照次序连接在一起,就组成了一个三进 ...
随机推荐
- linux编程之消息队列
消息队列是内核地址空间中的内部链表,通过linux内核在各个进程之间传递内容,消息顺序地发送到消息队列中,并且以几种不同的方式 从队列中获取,每个消息队列可以用IPC标识符唯一的进行标识,内核中的消息 ...
- defconfig file 的 位置
Platform MSM8917 MSM8937 defconfig file position Android/kernel/msm-3.18/arch/arm/configs/
- Bit banging
Bit banging Bit banging is a technique for serial communications using software instead of dedicated ...
- .net爬虫了解一下
using System; //添加selenium的引用 using OpenQA.Selenium.PhantomJS; using OpenQA.Selenium.Chrome; using O ...
- python string 对齐文本的几个方法
用rjust().ljust()和center()方法对齐文本
- 在Github里集成Readthedocs服务
Readthedocs支持Markdown格式和sphinx格式的文档排版,是部署项目文档的绝佳平台.利用Github的托管服务,我们可以方便地将文档托管于Github,并利用Readthedocs查 ...
- python的IDLE界面回退代码语句
Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句
- PHP7.3发布啦
作为PHP5的最后一个版本,也是目前使用最广泛的PHP版本,PHP 5.6始于公元2014年(不是1804年,嘿嘿),其第一个测试版PHP 5.6 alpha 1版于2014年1月发布.随机产生了第一 ...
- nginx 开启 gzip
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_types text/plain applicatio ...
- 六十 数据库访问 使用SQLAlchemy
数据库表是一个二维表,包含多行多列.把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录,比如,包含id和name的user表 ...