zoukankan      html  css  js  c++  java
  • HDU 5136 Yue Fei's Battle DP计数+分类讨论?分治?

    转载:http://blog.csdn.net/xiefubao/article/details/41709957

     1 #include <iostream>
     2 
     3 using namespace std;
     4 const long long mod = 1000000007;
     5 const long long  inv2 = (mod+1) / 2;
     6 const long long inv3 = (mod+1) / 3;
     7 long long dp[50055];
     8 long long sum[50055];
     9 void init()
    10 {
    11     dp[0] = 1;
    12     dp[1] = 1;
    13     dp[2] = 2;
    14     sum[0] = 1;
    15     sum[1] = 2;
    16     sum[2] = 4;
    17     for (int i = 3; i<=50050; i++)
    18     {
    19         dp[i] = (( dp[i-1] * sum[i-2] % mod ) + (dp[i - 1] + ((dp[i-1] * (dp[i-1]-1)  % mod )* inv2 % mod))  % mod )  % mod;
    20         //i-1 和 不到i-1   两个相同i-1  两个不同i-1 
    21         sum[i]=(sum [i-1] + dp[i] )% mod;
    22     }
    23 }
    24 int main()
    25 {
    26     init();
    27     int n;
    28     long long ans = 0LL;
    29     while (cin>>n&&n)
    30     {
    31 
    32         if (n%2 == 0)
    33         {
    34             ans = ((dp[n/2] * (dp[n/2] - 1+mod)  % mod )*inv2 % mod + dp[n/2] ) % mod;
    35         }
    36         else
    37         {
    38             ans = ((( (dp[n/2] * (dp[n/2]-1+mod) % mod) * (dp[n/2]-2+mod) % mod ) *inv3) % mod ) * inv2 % mod; // 三个不相同
    39             ans = (ans +  dp[n/2] ) % mod;// 三个完全相同
    40             ans =( ans + (dp[n/2] * ( dp[n/2] - 1 ) % mod ) % mod ) % mod; //二个相同
    41             ans = (ans +  ((dp[n/2] + ((dp[n/2] * (dp[n/2]-1+mod) % mod ) * inv2 % mod )) % mod ) * (sum[n/2-1]) % mod ) % mod;//一个不足
    42          }
    43          cout << ans <<endl;
    44     }
    45 }
  • 相关阅读:
    java Math类方法使用
    线性逻辑回归与非线性逻辑回归pytorch+sklearn
    Java学习方向
    ubuntu16.04安装Anaconda+Pycharm+Pytorch
    迁移学习resnet
    简单的CNN图像分类datasets.MNIST/FashionMNIST
    pytorch学习2
    tools/build.c
    zBoot/Makefile
    tools/version.c
  • 原文地址:https://www.cnblogs.com/HITLJR/p/6601529.html
Copyright © 2011-2022 走看看