链接: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[][][][];
  27.  
  28. int add(int A[],int B[]) ///Add B to A
  29. {
  30. for (int i=;i<;i++)
  31. {
  32. A[i]+=B[i];
  33. A[i+]+=A[i]/;
  34. A[i]%=;
  35. }
  36. }
  37.  
  38. int main()
  39. {
  40. dp[][][][]=;
  41. for (int i=;i<=;i++)
  42. for (int j=;j<=i;j++)
  43. for (int k=;k<=j;k++)
  44. {
  45. add(dp[i][j][k],dp[i-][j][k]);
  46. add(dp[i][j][k],dp[i][j-][k]);
  47. add(dp[i][j][k],dp[i][j][k-]);
  48. }
  49.  
  50. int n;
  51. while (cin>>n)
  52. {
  53. int k();
  54. while (!dp[n][n][n][k])
  55. k--;
  56. for (int i=k;i>=;i--)
  57. {
  58. if (i!=k)
  59. cout<<setw()<<setfill('');
  60. cout<<dp[n][n][n][i];
  61. }
  62. cout<<"\n"<<endl;
  63. }
  64. return ;
  65. }

还有打表的代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. using namespace std;
  5. char s[][]={
  6. "",
  7. "",
  8. "",
  9. "",
  10. "",
  11. "",
  12. "",
  13. "",
  14. "",
  15. "",
  16. "",
  17. "",
  18. "",
  19. "",
  20. "",
  21. "",
  22. "",
  23. "",
  24. "",
  25. "",
  26. "",
  27. "",
  28. "",
  29. "",
  30. "",
  31. "",
  32. "",
  33. "",
  34. "",
  35. "",
  36. "",
  37. "",
  38. "",
  39. "",
  40. "",
  41. "",
  42. "",
  43. "",
  44. "",
  45. "",
  46. "",
  47. "",
  48. "",
  49. "",
  50. "",
  51. "",
  52. "",
  53. "",
  54. "",
  55. "",
  56. "",
  57. "",
  58. "",
  59. "",
  60. "",
  61. "",
  62. "",
  63. "",
  64. "",
  65. "",
  66. "",
  67. };
  68. int main()
  69. {
  70. int n;
  71. while(scanf("%d",&n)>)
  72. {
  73. printf("%s\n\n",s[n]);
  74. }
  75. return ;
  76. }

hdu 1502 Regular Words的更多相关文章

  1. HDU 1502 Regular Words DP+高精度

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502 题目大意:找出总的满足条件的字符串数,num(a)=num(b)=num(c)且任何前缀均满足n ...

  2. hdu 1502 Regular Words(DP)

    题意: 一个单词X由{A,B,C}三种字母构成. A(X):单词X中A的个数.B(X),C(X)同理. 一个单词X如果是regular word必须满足A(X)=B(X)=C(X)且对于X的任意前缀有 ...

  3. hdu 1502 Regular Words_高精度+dp

    题意:问按规则排成的串有多少个A(c)>= B(c) >= C(c) 思路:因为写大整数太累,就偷懒了一下直接用java水过 import java.math.BigInteger; im ...

  4. HDU 6055 - Regular polygon | 2017 Multi-University Training Contest 2

    /* HDU 6055 - Regular polygon [ 分析,枚举 ] 题意: 给出 x,y 都在 [-100, +100] 范围内的 N 个整点,问组成的正多边形的数目是多少 N <= ...

  5. HDU 5972 Regular Number

    Regular Number http://acm.hdu.edu.cn/showproblem.php?pid=5972 题意: 给定一个字符串,求多少子串满足,子串的第i位,只能是给定的数(小于等 ...

  6. HDU 5972 Regular Number(ShiftAnd+读入优化)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...

  7. HDU 6055 Regular polygon

    Regular polygon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  8. 2017ACM暑期多校联合训练 - Team 2 1011 HDU 6055 Regular polygon (数学规律)

    题目链接 **Problem Description On a two-dimensional plane, give you n integer points. Your task is to fi ...

  9. hdu 5972 Regular Number 字符串Shift-And算法 + bitset

    题目链接 题意 给定两个串\(S,T\),找出\(S\)中所有与\(T\)匹配的子串. 这里,\(T\)的每位上可以有若干(\(\leq 10\))种选择,匹配的含义是:对于\(S\)的子串的每一位, ...

随机推荐

  1. 旧版青奥遇到的bug

    1.Cannot create PoolableConnectionFactory (Unknown database 'yoms') 答:服务器上的库都被人删了. 2.Cannot create P ...

  2. iOS开发小技巧--iOS键盘 inputView 和 inputAccessoryView

    iOS键盘 inputView 和 inputAccessoryView 1.inputAccessoryView UITextFields和UITextViews有一个inputAccessoryV ...

  3. bzoj 2738 矩阵乘法

    其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...

  4. BZOJ 2120: 数颜色

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3623  Solved: 1396[Submit][Status][Discuss] ...

  5. bzoj 4557: [JLoi2016]侦察守卫 树归

    bzoj 4557: [JLoi2016]侦察守卫 设f[x][j]表示覆盖以x为根的子树的所有应该被覆盖的节点,并且以x为根的子树向下j层全部被覆盖的最小代价. 设g[x][j]表示与x距离大于j全 ...

  6. 用java下载hdfs文件报NullPointerException

    用fs.copyToLocalFile( hdfsPath,localPath);下载hdfs的文件会报NullPointerException,具体报错为: java.lang.NullPointe ...

  7. python学习笔记-(十三)线程&多线程

    为了方便大家理解下面的知识,可以先看一篇文章:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 线程 1.什么是线程? ...

  8. JS各种方法

    一.JS(去掉前后空格或去掉所有空格)的用法 1.去掉字符串前后所有空格:代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ...

  9. Beanutils基本用法

    Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的.无论谁的项目,始终一天都会用得上它.我算是后知后觉了,第一回看到它的时候居然错过. 1.属性的动态gett ...

  10. 一次性事务和CTE插入数据的比较

    有时要构造一些数据来做测试数据,像下面这样: IF OBJECT_ID(N'T14') IS NOT NULL BEGIN DROP TABLE T14 END GO CREATE TABLE T14 ...