Problem Description

N个人围成一圈在讨论大扫除的事情,需要选出K个人。但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距离不能为2,他们想知道共有多少种方法。

Input

第一行包含一个数T(T<=100),表示测试数据的个数。

接下来每行有两个数N,K,N表示人数,K表示需要的人数(1<=N<=1000,1<=K<=N)。

Output

输出满足题意的方案数,方案数很大,所以请输出方案数mod 1,000,000,007 后的结果。

Sample Input

2 4 2 8 3

Sample Output

4 16
 
 
唔,这次月赛日了狗把.A题矩阵快速幂常数卡的想日狗!
这题一开始看错题看成线性的,于是写下了这个dp方程:dp[i][j] = dp[i-3][j-1] + dp[i-4][j-2]+ dp[i-1][j] ;
dp[i][j]表示前i个人选j个人合法的方案数
 
 
嗯,怎么看都很对的样子对吧,然而第二个样例16跑不出来,花了几乎半小时才发现是环形的,然而没关系233333前面写好的代码可以不用重写,发现假设首个格子和尾格子全没放,只有首或尾放,首和尾全放一共四种情况,讨论一下就可以O(1)成线性的的了
然后边界发现好麻烦,干脆小于6的全部打表,于是写下了如此丑陋的代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define maxn 2000
#define MOD 1000000007
using namespace std;
long long dp[maxn][maxn];
int main()
{
int t;
int n,k;
scanf("%d",&t);
dp[][]= dp[][] = dp[][] = ;
dp[][]=;dp[][]=;dp[][]=;
dp[][]=;dp[][]=;dp[][]=;
for(int i=;i<=;i++)
{
dp[i][] = ;
dp[i][] = i;
for(int j=;j<=(i);j++)
{
dp[i][j] = ((dp[i-][j-] + dp[i-][j-])%MOD + dp[i-][j]) % MOD;
}
}
int an[][]={};
an[][]=an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
an[][]=;
while(t--)
{
scanf("%d%d",&n,&k);
long long ans=;
if(n<=)
{
printf("%d\n",an[n][k]);
continue;
}
ans = ((dp[n-][k] + *(dp[n-][k-]+ (dp[n-][k-]))%MOD)%MOD+ dp[n-][k-])%MOD;
//cout<<fac[k]<<" "<<fac[n-k]<<endl;
printf("%I64d\n",ans);
}
return ;
}
 
 

最新文章

  1. Python 从零学起(纯基础) 笔记 之 collection系列
  2. hihoCoder 后缀自动机三&#183;重复旋律6
  3. [poj1182]食物链(并查集+补集)
  4. linux系统数据盘挂载教程
  5. Hibernate(八)__级联操作、struts+hibernate+接口编程架构
  6. PS切图的几种方式
  7. struts2:异常处理
  8. 转: 关于Linux与JVM的内存关系分析
  9. Python基本数据类型之list列表
  10. 双人对战的球类游戏IOS源码
  11. AC题目简解-线段树
  12. nyoj 168 房间安排(区间覆盖)
  13. C# 文件粉碎
  14. linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。
  15. Android SDK 环境变量配置(Windows)
  16. BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】
  17. 最详细的JavaWeb开发基础之java环境搭建(Windows版)
  18. nginx的限流问题
  19. Centos 7 安装composer和Laravel
  20. [转][Oracle][null]

热门文章

  1. Android(java)学习笔记121:BroadcastReceiver之 自定义广播
  2. 复杂UI的组织-创建者模式-uitableview思想
  3. kubernetes-平台日志收集(ELK)
  4. typescript设置全屏
  5. 说说TCP的三次握手
  6. Where art thou-freecodecamp算法题目
  7. Java 的Throwable、error、exception的区别
  8. Mycat高可用解决方案二(主从复制)
  9. 如何用纯 CSS 创作一个行驶中的火车 loader
  10. 如何封装RESTful Web Service