题目链接:

  fzu 2204 7

题目描述:

  给出n个小球,每个小球只能涂黑色或者是白色,七个连续的不能是同种颜色,问有多少种涂色方法?

解题思路:

  刚开始没有考虑到是环形的,WA的风生水起,怪我咯!怪我咯!最后看到是环形的,然后就考虑去除环的影响。

  先设定起始位置小球颜色为0(白色), (1-->黑色),考虑可知起始位置小球颜色为1的方案数目与设定方案相同,所以算出任意一种,乘上2就是答案。

  dp[a][x][y] 代表 a-->前a个小球颜色都为0, x-->第i位置小球的颜色, y-->当前位置为y, dp[x][y]-->当前状态的摆放方案数目。第一维与后面的两维是独立的,没有什么因果关系,讷,现在我们把第一维删掉,然后对后面两维循环6次即可。

 

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
const int mod = ;
int dp[][maxn]; int main ()
{
int T, n;
scanf ("%d", &T);
for (int t=; t<=T; t++)
{
scanf ("%d", &n);
int ans = ;
for (int start=; start<; start++)
{
memset (dp, , sizeof(dp));
dp[][start] = ;
for (int i=start+; i<=n; i++)
{
for (int j=; j<; j++)
{
if (i==n && j == )
{
for (int k=; k<=-start; k++)
if (i > k)
dp[j][i] += dp[-j][i-k];
dp[j][i] = dp[j][i] % mod;
}
else
{
for (int k=; k<=; k++)
if (i > k)
dp[j][i] += dp[-j][i-k];
dp[j][i] = dp[j][i] % mod;
}
}
}
ans = (ans + dp[][n] + dp[][n]) % mod;
}
printf ("Case #%d: %d\n", t, (ans * ) % mod);
}
return ;
}

最新文章

  1. jQuery 模态对话框示例
  2. centos7 安装jdk7
  3. ZBrush中必须记住的常用快捷键
  4. 第八篇 SQL Server代理使用外部程序
  5. mysql 全文检索的匹配问题
  6. 以libevent网络库为引:网络通信和多线程
  7. React——state
  8. 基于开源CA系统ejbca community 6.3.1.1构建私有CA管理数字证书
  9. mitmproxy 中间人攻击的小玩笑
  10. Python生成目录树代码
  11. 聊聊 Nginx 的反向代理
  12. zookeeper(2) zookeeper的核心原理
  13. Py脚本运行后暂停不退出
  14. C#调用DLL各种传参
  15. linux -- #!/bin/bash
  16. c++ vs 快捷方式
  17. 【BBS】BBS论坛项目各个页面的工作流程图
  18. gcc编译程序的流程
  19. 我眼中的DevOps(转)
  20. 97. Interleaving String(字符串的交替连接 动态规划)

热门文章

  1. Hero In Maze
  2. POJ 2586 Y2K Accounting Bug(枚举大水题)
  3. SpringCloud遇到的坑
  4. debian iptables持久化
  5. 关于chroot
  6. cocos2d-x交叉编译到安卓
  7. 在无代码文件的aspx文件中添加类、函数和字段的方法
  8. html 常用转译空格字符
  9. mysql_proxy
  10. spring的依赖注入(DI)、控制反转(IOC)和面向切面(AOP)