思路:状态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的更多相关文章

  1. LightOJ 1244 - Tiles 猜递推+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...

  2. hdu 4614 pieces 状态DP

    题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:htt ...

  3. hdu 4778 Gems Fight! 博弈+状态dp+搜索

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...

  4. POJ 3254 压缩状态DP

    题意:一个矩形网格,可以填0或1, 但有些位置什么数都不能填,要求相邻两个不同时为1,有多少种填法.矩形大小最大 12*12. 压缩状态DP大多有一个可行的state的范围,先求出这个state范围, ...

  5. 【状态DP】 HDU 1074 Doing Homework

    原题直通车:HDU  1074  Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样 ...

  6. Hdu 4539 【状态DP】.cpp

    题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...

  7. hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)

    http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...

  8. hdu 5135(2014广州—状态dp)

    t题意:给你n条边,构造任意个三角形,一个三角形恰好只用3条边,每条边只能一次,求面积最大值 思路: 最开始想的是先排序从大到小取,但感觉并不怎么靠谱. 最多12条边,所以可以求出所有可能的三角形面积 ...

  9. Hdu 3001 Travelling 状态DP

    题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进 ...

随机推荐

  1. js_面向对象设计和行为委托设计模式

    最近换了新工作,面试过程中有多多少少的问题没有给的出答案,为自己的技术短板而促急. javascript中万物皆对象(键:值构成的一种数据),暂且不讨论这个句话的对与错,可以想象对象在javascri ...

  2. cart回归树算法过程

    回归树:使用平方误差最小准则 训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}. 输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为: ...

  3. python中multiprocessing模块

    multiprocess模块那来干嘛的? 答:利用multiprocessing可以在主进程中创建子进程.Threading是多线程,multiprocessing是多进程. #该模块和Threadi ...

  4. face_recognition 人脸识别报错

    [root@localhost examples]# python facerec_from_video_file.py RuntimeError: module compiled against A ...

  5. shell下在while循环中使用ssh命令的问题

    1 现象描述 最近使用ssh批量执行命令(已经做了密钥互信了),脚本读取配置文件中的主机列表(内容为每行一台主机IP地址),然后执行,可是每次只是执行第一台,就退出循环了. 2 排查思路 由于脚本比较 ...

  6. Open Compute Project

    Open Compute Project https://github.com/opencomputeproject https://github.com/floodlight/floodlight ...

  7. 使用js获取url里的指定参数

    String.prototype.getQuery = function(name){     var reg = new RegExp("(^|&)"+ name +&q ...

  8. visualvm监控远程机器上的Java程序

    源文:http://hanwangkun.iteye.com/blog/1195526

  9. 三:Storm设计一个Topology用来统计单词的TopN的实例

    Storm的单词统计设计 一:Storm的wordCount和Hadoop的wordCount实例对比

  10. Monty Hall悖论

    Monty Hall悖论又称为蒙提·霍尔悖论.三门问题.Monty Hall是上个世纪60年代,电视游戏节目“Let's Make a Deal”的主持人,这个悖论便是以他的名字来命名的.节目的规则是 ...