zoukankan      html  css  js  c++  java
  • hdu 1502 Regular Words

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502

    思路:给定一个n,分别由n个a,b,c组成的字符串的所有前缀中a的个数大于等于b的个数大于等于c的个数,求满足这一条件的字符串的个数有多少,本题要用到dp及大数运算,转移方程:dp[i][j][k]=dp[i-1][j][k]+dp[i][j-1][k]+dp[i][j][k-1],其中i,j,k分别代表a,b,c的个数

    老实说并不会写大数,不过发现了一段很神奇的代码

     1 #include<iostream>
     2 #include<iomanip>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<sstream>
     6 #include<stack>
     7 #include<queue>
     8 #include<fstream>
     9 #include<algorithm>
    10 #include<map>
    11 #include<set>
    12 #include<vector>
    13 #include<cmath>
    14 #define CLR(x) memset(x,0,sizeof(x))
    15 #define ll long long
    16 #define eps 1e-6
    17 #define pow2(x) ((x)*(x))
    18 #define forto(i,n) for(int i=0;i<n;i++)
    19 #define for1to(i,n) for(int i=1;i<=n;i++)
    20 #define VI vector<int>
    21 using namespace std;
    22 const double PI=acos(-1.0);
    23 #define INF 0x3fffffff          ///INT_MAX一半防止上溢
    24 #define NINF 0xbfffffff
    25 
    26 int dp[61][61][61][100];
    27 
    28 int add(int A[],int B[])        ///Add B to A
    29 {
    30     for (int i=0;i<100;i++)
    31     {
    32         A[i]+=B[i];
    33         A[i+1]+=A[i]/10000;
    34         A[i]%=10000;
    35     }
    36 }
    37 
    38 
    39 
    40 int main()
    41 {
    42     dp[0][0][0][0]=1;
    43     for (int i=1;i<=60;i++)
    44         for (int j=0;j<=i;j++)
    45             for (int k=0;k<=j;k++)
    46             {
    47                 add(dp[i][j][k],dp[i-1][j][k]);
    48                 add(dp[i][j][k],dp[i][j-1][k]);
    49                 add(dp[i][j][k],dp[i][j][k-1]);
    50             }
    51 
    52     int n;
    53     while (cin>>n)
    54     {
    55         int k(99);
    56         while (!dp[n][n][n][k])
    57             k--;
    58         for (int i=k;i>=0;i--)
    59         {
    60             if (i!=k)
    61                 cout<<setw(4)<<setfill('0');
    62             cout<<dp[n][n][n][i];
    63         }
    64         cout<<"
    "<<endl;
    65     }
    66     return 0;
    67 } 

     还有打表的代码

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 char s[150][1000]={
     6 "1",
     7 "1",
     8 "5",
     9 "42",
    10 "462",
    11 "6006",
    12 "87516",
    13 "1385670",
    14 "23371634",
    15 "414315330",
    16 "7646001090",
    17 "145862174640",
    18 "2861142656400",
    19 "57468093927120",
    20 "1178095925505960",
    21 "24584089974896430",
    22 "521086299271824330",
    23 "11198784501894470250",
    24 "243661974372798631650",
    25 "5360563436201569896300",
    26 "119115896614816702500900",
    27 "2670926804331443293626900",
    28 "60386171228363065768956000",
    29 "1375596980582110638216817680",
    30 "31554078431506568639711925552",
    31 "728440733705121725605657358256",
    32 "16916012593818937850175820875056",
    33 "394984727560107218767652172156480",
    34 "9269882950945137003216002357575872",
    35 "218589820552932101591964442689934272",
    36 "5177405669064206309480641678873685136",
    37 "123139887106265725065261170839575261246",
    38 "2940211742938376804365727956142799686970",
    39 "70461309651358512358741033490151564263034",
    40 "1694426732092192797198296281548882854896770",
    41 "40879953049935966764838175153044218787509460",
    42 "989318124094680800242093703952690318964293660",
    43 "24011992526103689868224096174884123328708261100",
    44 "584414956558400574946623386902564355477176447080",
    45 "14261150342358043298392602404780869211095488665940",
    46 "348876433985002864104580005170614922408018905657020",
    47 "8555006509113973886896694412506009110609925390878620",
    48 "210257823823361408953856390159370731312558948560177500",
    49 "5178713915261459187808923452167773648813573133021584000",
    50 "127816663734641521693312994768720558317819058630953008000",
    51 "3160890723051037742300958639363743464856851891194511344000",
    52 "78316111638147520232116305011469771592038383559489541704000",
    53 "1943917771018304520047172570820410402016667020494472553010000",
    54 "48334523581589010102952513742546024844918906756931542442556400",
    55 "1203813957908516875152358489329058054078745007110871474716375280",
    56 "30029983483935083858438698423851117882968874317657169412268673840",
    57 "750270153399794678576435057573545926324276055884108148422050727840",
    58 "18772482769028405636917719941593858764528793976890630506115671775200",
    59 "470373947038907707302405010980987131831213397364392909428995307126880",
    60 "11802109943885320655951253002795677125946808879324767545672973160638080",
    61 "296516920131524804299707608337156053506400465189952712435084509896783040",
    62 "7459203321130790040650176332416188852363369960068846727881499803410725440",
    63 "187875141510304732204453155491218970539216498205240765481036372897711988800",
    64 "4737637890492057297860769571861620074038072983555206964113320603342642320960",
    65 "119605940186192921945993199027326146131452990076639651225155962772912609414400",
    66 "3022912056752362939484322031260179006906680462576858197252183463144268821651200",
    67 };
    68 int main()
    69 {
    70     int n;
    71     while(scanf("%d",&n)>0)
    72     {
    73         printf("%s
    
    ",s[n]);
    74     }
    75     return 0;
    76 } 
  • 相关阅读:
    我的python之路5
    我的python之路4
    我的python之路3
    我的python之路2
    我的python之路1
    AJAX 表单提交 文件上传
    PBKDF2WithHmacSHA1算法
    Ant 随想
    maven 启蒙
    HELLO WORLD
  • 原文地址:https://www.cnblogs.com/pter/p/5749072.html
Copyright © 2011-2022 走看看