zoukankan      html  css  js  c++  java
  • bzoj 2281: [Sdoi2011]黑白棋

    再次,,,,,虚(一开始看错题了,看成一次移动一个棋子,能移动1-d个格子。。。这样的话有没有大神会做??本蒟蒻就教)

    额,,直接%%%%把。。。http://hzwer.com/5760.html

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<map>
     5 #include<queue>
     6 #define N 1000005
     7 #define inf 1000000000
     8 #define LL long long
     9 using namespace std;
    10 const LL mod=1e9+7;
    11 LL tot,ans;
    12 int n,K,d,p;
    13 LL bin[25];
    14 LL c[10005][205],f[25][10005];
    15 void pre()
    16 {
    17     for (int i=0; i<=n; i++) c[i][0]=1;
    18     for (int i=1; i<=n; i++)
    19         for (int j=1; j<=min(2*K,i); j++)
    20             c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
    21 }
    22 int C(int x, int y)
    23 {
    24     if (y>x-y) y=x-y;
    25     return c[x][y];
    26 }
    27 void add(LL &x, LL y)
    28 {
    29     x=(x+y)%mod;
    30 }
    31 int main()
    32 {
    33     bin[0]=1; for (int i=1; i<=15; i++) bin[i]=bin[i-1]<<1;
    34     scanf("%d %d %d",&n,&K,&d); K/=2; pre(); f[0][0]=1;
    35     for (int i=0; i<15; i++)
    36         for (int j=0; j<=n-2*K; j++)
    37             for (int k=0; k*(d+1)<=K && j+(d+1)*k*bin[i]<=n-2*K; k++)
    38             {
    39                 add(f[i+1][j+k*(d+1)*bin[i]],f[i][j]*C(K,k*(d+1)));
    40             }
    41     for (int i=0; i<=n-2*K; i++)
    42         add(ans,f[15][i]*C(n-i-K,K));
    43     tot=C(n,K*2);
    44     cout<<(tot+mod-ans)%mod;
    45     return 0;
    46 }
  • 相关阅读:
    杨辉三角
    数组的两种输出方法
    整数分割各位数
    Fibonacci
    imageview圆角的实现
    listview定位到上次显示的位置
    安卓客户端 扫描二维码登陆
    java,UDP协议简单实现
    java 反射机制的实例
    js中正则表达式 书写方法
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6498509.html
Copyright © 2011-2022 走看看