• fzu 2204 7 dp


    题目链接:

      fzu 2204 7

    题目描述:

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

    解题思路:

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

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

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

     

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 100010;
     8 const int mod = 2015;
     9 int dp[2][maxn];
    10 
    11 int main ()
    12 {
    13     int T, n;
    14     scanf ("%d", &T);
    15     for (int t=1; t<=T; t++)
    16     {
    17         scanf ("%d", &n);
    18         int ans = 0;
    19         for (int start=1; start<7; start++)
    20         {
    21             memset (dp, 0, sizeof(dp));
    22             dp[0][start] = 1;
    23             for (int i=start+1; i<=n; i++)
    24             {
    25                 for (int j=0; j<2; j++)
    26                 {
    27                     if (i==n && j == 0)
    28                     {
    29                         for (int k=1; k<=6-start; k++)
    30                             if (i > k)
    31                                 dp[j][i] += dp[1-j][i-k];
    32                         dp[j][i] = dp[j][i] % mod;
    33                     }
    34                     else
    35                     {
    36                         for (int k=1; k<=6; k++)
    37                             if (i > k)
    38                             dp[j][i] += dp[1-j][i-k];
    39                         dp[j][i] = dp[j][i] % mod;
    40                     }
    41                 }
    42             }
    43             ans = (ans + dp[0][n] + dp[1][n]) % mod;
    44         }
    45         printf ("Case #%d: %d
    ", t, (ans * 2) % mod);
    46     }
    47     return 0;
    48 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    case when then 根据不同条件 查询不同的数据 相当于 if-else if-else
    完美的拼接sql语句,中间可以加字符等东西,
    C++抽象类
    C #引用NuGet程序包MySQLData问题
    win10磁盘100%占用解决方法
    C# ASP.NetCore 检测到包降级
    VS 命令“npm install”已退出的问题
    序列化和反序列化含义
    数据库MySQL忘记本地密码
    MongoDB授予权限
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4861586.html
Copyright © 2020-2023  润新知