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的状态按照次序连接在一起,就组成了一个三进 ...
随机推荐
- deepin 快捷键
从此脱离鼠标
- Win7(64bit)搭建SVN
开始: 第一步:下载SVN客户端程序TortoiseSVN并安装(不习惯英文操作界面的顺便在最底下下载一个语言包),下载地址tortoiseSVN下载(由于系统是64位的,我下载的是TortoiseS ...
- OOM有哪些情况,SOF有哪些情况
OOM 1.全称为OutOfMemoryError异常,如果虚拟机在扩展栈时无法申请足够的内存空间,抛出它: 2.Java heap异常:java.lang.OutOfMemoryError:Java ...
- HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别
HashMap 1.线程不安全: 2.允许null value 和 null key: 3.访问效率比较高: 4.Java1.2引进的Map接口的一个实现: 5.轻量级: 6.根据键的HashCode ...
- java===java基础学习(16)---final
final-----概念 1.当不希望父类的某个方法被子类覆盖(override)时,可以用final关键字修饰. 2.当不希望类的某个变量的值被修改时,可以用final修饰.如果要用final,则必 ...
- 用JavaScript简单判断浏览器类型
判断浏览器类型 /** * 判断浏览器类型 * 返回表示浏览器类型的字符串 */ function whoIsMe(){ var explorer = navigator.userAgent; if( ...
- [USACO06NOV]路障---严格次短路
Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样, ...
- XAlign—自动对齐代码插件
XAlign An amazing Xcode plugin to align regular code. It can align anything by using custom alignmen ...
- linux服务器上如何显示工作路径
1. 修改PS环境变量 [root@linux-node01 ~]# vi /etc/bashrc [ "$PS1" = "\\s-\\v\\\$ " ] &a ...
- False Positives和False Negative等含义
True Positive (真正, TP)被模型预测为正的正样本: True Negative(真负 , TN)被模型预测为负的负样本 : False Positive (假正, FP)被模型预测为 ...