hackerrank【Lego Blocks】:计数类dp
题目大意:
修一个层数为n,长度为m的墙,每一层可以由长度为1、2、3、4的砖块构成。
每一层都在同一个长度处出现缝隙是方案非法的,问合法的方案数有多少种
思路:
先求出总方案,再减去所有非法的方案数
总方案数容易求得,略
非法方案数就不太好求了,由于需要判重,我们可以按照 " 最左边的缝隙 " 所在的位置给非法方案数分类
这样就不会有重复了!
具体见代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
#define mod 1000000007
long long n,m;
long long dp[],a[],sum[];
long long pow(long long a,long long b)
{
long long res=;
while(b)
{
if(b&)
{
res*=a;
res%=mod;
}
a*=a;
a%=mod;
b>>=;
}
return res;
}
void solve(long long n,long long m)
{
a[]=;
a[]=;
a[]=;
a[]=;
for(int i=;i<=n;i++)
{
a[i]=(a[i-]+a[i-]+a[i-]+a[i-])%mod;
}
for(int i=;i<=n;i++)
{
sum[i]=pow(a[i],m);
}
dp[]=;
for(int i=;i<=n;i++)
{
dp[i]=sum[i];
for(int j=;j<i;j++)
{
dp[i]-=dp[j]*sum[i-j];
dp[i]=(dp[i]%mod+mod)%mod;
}
}
cout<<dp[n]<<endl;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
cin>>n>>m;
solve(m,n);
}
return ;
}
hackerrank【Lego Blocks】:计数类dp的更多相关文章
- 动态规划——区间DP,计数类DP,数位统计DP
本博客部分内容参考:<算法竞赛进阶指南> 一.区间DP 划重点: 以前所学过的线性DP一般从初始状态开始,沿着阶段的扩张向某个方向递推,直至计算出目标状态. 区间DP也属于线性DP的一种, ...
- SDOI2010代码拍卖会 (计数类DP)
P2481 SDOI2010代码拍卖会 $ solution: $ 这道题调了好久好久,久到都要放弃了.洛谷的第五个点是真的强,简简单单一个1,调了快4个小时! 这道题第一眼怎么都是数位DP,奈何数据 ...
- CH5E26 扑克牌 (计数类DP)
$ CH~5E26~\times ~ $ 扑克牌: (计数类DP) $ solution: $ 唉,计数类DP总是这么有套路,就是想不到. 这道题我们首先可以发现牌的花色没有价值,只需要知道每种牌有 ...
- $Poj1737\ Connected\ Graph$ 计数类$DP$
AcWing Description 求$N$个节点的无向连通图有多少个,节点有标号,编号为$1~N$. $1<=N<=50$ Sol 在计数类$DP$中,通常要把一个问题划分成若干个子问 ...
- $CF559C\ Gerald\ and\ Fiant\ Chess$ 计数类$DP$
AcWing Description 有个$H$行$W$列的棋盘,里面有$N$个黑色格子,求一个棋子由左上方格子走到右下方格子且不经过黑色格子的方案数. $1<=H,M<=1e5,1< ...
- $CH5302$ 金字塔 区间$DP$/计数类$DP$
CH Sol f[l][r]表示l到r这段区间对应的金字塔结构种数 发现是f[l][r]是可以由比它小的区间推出来的 比如已知f[l+1][k],f[k+1][r],不难想到f[l][r]+=f[l+ ...
- codeforces 277.5 div2 F:组合计数类dp
题目大意: 求一个 n*n的 (0,1)矩阵,每行每列都只有两个1 的方案数 且该矩阵的前m行已知 分析: 这个题跟牡丹江区域赛的D题有些类似,都是有关矩阵的行列的覆盖问题 牡丹江D是求概率,这个题是 ...
- Codeforces 9D How many trees? 【计数类DP】
Codeforces 9D How many trees? LINK 题目大意就是给你一个n和一个h 问你有多少个n个节点高度不小于h的二叉树 n和h的范围都很小 感觉有无限可能 考虑一下一个很显然的 ...
- Codeforces 28C Bath Queue 【计数类DP】*
Codeforces 28C Bath Queue LINK 简要题意:有 n 个人等概率随机进入 m 个房间,一个房间可以有多个人,第 i 个房间有 ai 个水龙头,在一个房间的人要去排队装水,他们 ...
随机推荐
- Java基础知识强化27:Object类之toString()方法
1. Object类的toString()方法: public String toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: package cn.itc ...
- URAL 1306 - Sequence Median 小内存求中位数
[题意]给出n(1~250000)个数(int以内),求中位数 [题解]一开始直接sort,发现MLE,才发现内存限制1024k,那么就不能开int[250000]的数组了(4*250000=1,00 ...
- Spring.net--很棒的事务处理
1--Case 比如t_Order订单表1,t_OrderDetail订单明细表2 下一张订单会往表1插入一条数据,表2会插入多行数据 使用Spring.net事务管理 例如 ---Order---订 ...
- Memcached应用总结
Memcached应用总结 memcached是一款高性能的分布式缓存系统,凭借其简单方便的操作,稳定可靠的性能广泛应用于互联网应用中,网上关于memcached介绍的资料也很多,最经典的资料就是&l ...
- (转)CentOS下用yum搭建LNMP服务器
原文链接:http://www.xiaohuai.com/2733 CentOS下搭服务器也折腾好几次了, 每次都知道个大概, 具体repo的地址什么的还都要现找, 实在不效率, 干脆整理记录下来. ...
- Lesson 5: Typography in Product Design
Lesson 5: Typography in Product Design Article 1: Interactive Guide to Blog Typography 布局(Layout) 用空 ...
- javascript 更改控件的class.
指定 className即可, 如通过id,可这样更改: document.getElementById("myDIV").className = "calssName& ...
- Linux下批量替换文件内容方法
1:查找find . -type f -name "*.html"|xargs grep ‘yourstring’ 2:查找并替换find -name '要查找的文件名' | xa ...
- 在iptables和selinux中放行smb服务
配置selinux [root@localhost samba]# getsebool -a | grep samba 查找selinux中对samba的限制项samba_domain_control ...
- oracle 界面分页
/** * */ package org.pan.util; import java.sql.ResultSet; import java.sql.SQLException; import java. ...