Problem Description

n个有标号的球围成一个圈。每个球有两种颜色可以选择黑或白染色。问有多少种方案使得没有出现连续白球7个或连续黑球7个。

 Input

第一行有多组数据。第一行T表示组数。(T <= 20)

每组包含n,表示球的个数。(1 <= n <= 100000)

 Output

每组先输出 "Case #x: " (其中x为当前组数) 该行接下来输出方案数。方案数mod 2015。

 Sample Input

271

 Sample Output

Case #1: 126Case #2: 2

 Source

FOJ有奖月赛-2015年10月

这道题可以用dp做,用dp[i][j][k]表示前i个球中,末尾连续j个白球,连续k个黑球的方案数,那么跟fzu2200那题一样,因为是环,所以我们可以枚举开始的状态(即开始有多少个黑球连续,这里我们只要考虑有几个黑球就行,因为是对称的,所以最后答案只要乘2就行了),然后每一步枚举取白球还是黑球,状态转移一下就行了。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 0x7fffffff
#define maxn 100050
#define MOD 2015
ll dp[maxn][7][7],rear[maxn];
void init()
{
int i,j,k,ii,jj;
memset(rear,0,sizeof(rear));
for(k=1;k<=6;k++){
memset(dp,0,sizeof(dp));
dp[k+1][1][0]=1;
for(i=k+1;i<=100020;i++){
//放黑球
for(ii=1;ii<=6;ii++){
dp[i][0][1]=(dp[i][0][1]+dp[i-1][ii][0])%MOD;
}
for(ii=1;ii<=5;ii++){
dp[i][0][ii+1]=(dp[i][0][ii+1]+dp[i-1][0][ii])%MOD;
}
//放白球
for(ii=1;ii<=6;ii++){
dp[i][1][0]=(dp[i][1][0]+dp[i-1][0][ii])%MOD;
}
for(ii=1;ii<=5;ii++){
dp[i][ii+1][0]=(dp[i][ii+1][0]+dp[i-1][ii][0])%MOD;
} //加入到答案中
for(ii=1;ii<=6;ii++){
rear[i]=(rear[i]+dp[i][ii][0])%MOD;
}
for(ii=1;ii+k<7;ii++){
rear[i]=(rear[i]+dp[i][0][ii])%MOD;
} } } } int main()
{
int n,m,i,j,T,cas=0;
init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
cas++;
printf("Case #%d: ",cas);
if(n<=6){
int ans=1;
for(i=1;i<=n;i++)ans*=2;
printf("%d\n",ans);
continue;
}
printf("%I64d\n",rear[n]*2%MOD);
}
return 0;
}

fzu2204 7的更多相关文章

  1. fzu2204 dp

    2015-10-06 19:31:05 n个有标号的球围成一个圈.每个球有两种颜色可以选择黑或白染色.问有多少种方案使得没有出现连续白球7个或连续黑球7个. 每组包含n,表示球的个数.(1 <= ...

随机推荐

  1. oracle坚决不挂2(SQLPLUS基础命令)

    继续复习!!SQLplus基础命令,其实这个应该是第一个要复习的.因为基础,你懂得..要想学会跑,你先得知道该怎么走吧. win+R 输入cmd ,我们开始启动SQLplus sqlplus user ...

  2. 立完flag,你可能需要对flag进行量化

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...

  3. Assuming that agent dropped connection because of access permission

    Assuming that agent dropped connection because of access permission

  4. C语言中左值和右值的区别(C语言学习笔记)

    重要的内容要重复强调: C语言的术语Ivalue指用于识别或定位一个存储位置的标识符.( 注意:左值同时还必须是可改变的) 其实rvalue的发明完全是为了搭配lvalue , rvalue你可以理解 ...

  5. mysql锁表问题

    查看当前所有的进程信息: show full processlist; 查看当前所有的事务 select * from information_schema.innodb_trx; 查看当前出现的锁 ...

  6. IP2188中文资料书

    IP2188 是一款集成 12 种.用于 USB 输出端口的快充协议 IC,支持 USB 端口充电协议.支持 11种快充协议,包括 USB TypeC PD2.0/PD3.0/PPS DFP,HVDC ...

  7. CentOS7 通过snat进行上网

    需求: 有两台服务器,一台绑定了弹性公网IP,另外一台没有,需要内网服务器通过有弹性ip的机器代理进行上网. 环境: centos7 操作系统 服务器A: 192.168.0.18 (可以上网,有弹性 ...

  8. WireShark 之 text2pcap

    前言 本来想用 010Editer 的,看到破解教程头都大了,那么就用 WireShark 的 Text2pcap 吧! 正文 打开CMD控制台窗口,转到WireShark安装目录 ,此处可以shif ...

  9. Vim配置及其他注意事项

    常用的一些配置 set t_ti= set t_te= "这两个比较特殊,后边说 set termencoding=utf-8 set encoding=utf-8 set fileenco ...

  10. Webpack4.0各个击破(8)tapable篇

    目录 一. tapable概述 二. tapable-0.2源码解析 2.1 代码结构 2.2 事件监听方法 2.3 事件触发方法 三. tapable1.0概述 一. tapable概述 tapab ...