题目传送门

  1. /*
  2. 题意:转换就是求n位数字,总和为s/2的方案数
  3. DP+高精度:状态转移方程:dp[cur^1][k+j] = dp[cur^1][k+j] + dp[cur][k];
  4. 高精度直接拿JayYe的:)
  5. 异或运算的规则:
  6. 0⊕0=0,0⊕1=1
  7. 1⊕0=1,1⊕1=0
  8. 口诀:相同取0,相异取1
  9. */
  10. #include <cstdio>
  11. #include <cstring>
  12. #include <string>
  13. #include <iostream>
  14. #include <algorithm>
  15. using namespace std;
  16. const int numlen = ;
  17. const int numbit = ;
  18. const int addbit = ;
  19. const int maxn = numlen/numbit + ;
  20. struct bign {
  21. int len, s[numlen];
  22. bign() {
  23. memset(s, , sizeof(s));
  24. len = ;
  25. }
  26. bign(int num) { *this = num; }
  27. bign(const char *num) { *this = num; }
  28. bign operator = (const int num) {
  29. char s[numlen];
  30. sprintf(s, "%d", num);
  31. *this = s;
  32. return *this;
  33. }
  34. bign operator = (const char *num){
  35. int clen = strlen(num);
  36. while(clen > && num[] == '') num++, clen--;
  37. len = ;
  38. for(int i = clen-;i >= ; i -= numbit) {
  39. int top = min(numbit, i+), mul = ;
  40. s[len] = ;
  41. for(int j = ;j < top; j++) {
  42. s[len] += (num[i-j]-'')*mul;
  43. mul *= ;
  44. }
  45. len++;
  46. }
  47. deal();
  48. return *this;
  49. }
  50. void deal() {
  51. while(len > && !s[len-]) len--;
  52. }
  53. bign operator + (const bign &a) const {
  54. bign ret;
  55. ret.len = ;
  56. int top = max(len, a.len), add = ;
  57. for(int i = ;add || i < top; i++) {
  58. int now = add;
  59. if(i < len) now += s[i];
  60. if(i < a.len) now += a.s[i];
  61. ret.s[ret.len++] = now%addbit;
  62. add = now/addbit;
  63. }
  64. return ret;
  65. }
  66. bign operator * (const bign &a)const {
  67. bign ret;
  68. ret.len = len + a.len;
  69. for(int i = ;i < len; i++) {
  70. int pre = ;
  71. for(int j = ;j < a.len; j++) {
  72. int now = s[i]*a.s[j] + pre;
  73. pre = ;
  74. ret.s[i+j] += now;
  75. if(ret.s[i+j] >= addbit) {
  76. pre = ret.s[i+j]/addbit;
  77. ret.s[i+j] -= pre*addbit;
  78. }
  79. }
  80. if(pre) ret.s[i+a.len] = pre;
  81. }
  82. ret.deal();
  83. return ret;
  84. }
  85. }dp[][];
  86. istream& operator >> (istream &in, bign &x) {
  87. string s;
  88. in >> s;
  89. x = s.c_str();
  90. return in;
  91. }
  92. ostream& operator << (ostream &out, const bign &x) {
  93. printf("%d", x.s[x.len-]);
  94. for(int i = x.len-;i >= ; i--) printf("%04d", x.s[i]);
  95. return out;
  96. }
  97. int main(void) //URAL 1036 Lucky Tickets
  98. {
  99. //freopen ("W.in", "r", stdin);
  100. int n, s;
  101. while (scanf ("%d%d", &n, &s) == )
  102. {
  103. if (s & ) {puts (""); continue;}
  104. dp[][] = ;
  105. int cur = ;
  106. for (int i=; i<=n; ++i)
  107. {
  108. for (int j=; j<=s/; ++j) dp[cur^][j] = ;
  109. for (int j=; j<=; ++j)
  110. {
  111. for (int k=; k+j<=s/; ++k)
  112. dp[cur^][k+j] = dp[cur^][k+j] + dp[cur][k];
  113. }
  114. cur ^= ;
  115. }
  116. cout << dp[cur][s/] * dp[cur][s/] << endl;
  117. }
  118. return ;
  119. }

DP+高精度 URAL 1036 Lucky Tickets的更多相关文章

  1. Ural 1036 Lucky Tickets

    Lucky Tickets Time Limit: 2000ms Memory Limit: 16384KB This problem will be judged on Ural. Original ...

  2. URAL 1036(dp+高精度)

    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Pract ...

  3. POJ-2346 Lucky tickets(线性DP)

    Lucky tickets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3298 Accepted: 2174 Descrip ...

  4. Codeforces Gym 100418J Lucky tickets 数位DP

    Lucky ticketsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  5. 递推DP URAL 1031 Railway Tickets

    题目传送门 /* 简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF 注意:s1与s2大小不一定,坑! 详细解释:http://blog.csdn.net/kk303/article/d ...

  6. ural 1217. Unlucky Tickets

    1217. Unlucky Tickets Time limit: 1.0 secondMemory limit: 64 MB Strange people live in Moscow! Each ...

  7. POJ 2346:Lucky tickets

    Lucky tickets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3247   Accepted: 2136 Des ...

  8. 1166 矩阵取数游戏[区间dp+高精度]

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [ ...

  9. bzoj 1089 [SCOI2003]严格n元树(DP+高精度)

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1250  Solved: 621[Submit][Statu ...

随机推荐

  1. 关于hbase集群

    1 一个hadoop data node上运行一个region server region server和data node在同一台机器上,这样就保证了数据的局部性. 2 hbase region s ...

  2. bash_action

    https://stackoverflow.com/questions/12076326/how-to-install-maven2-on-redhat-linux #!/bin/bash # Tar ...

  3. hdfs namenode出错

    http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 健壮性 HDFS的主要目标就是即使在出错的情况下也要保证数据存储的可靠性.常见的三种出 ...

  4. extjs 4 checkboxgroup Panel的简单用法

    Ext.require([ 'Ext.tree.*', 'Ext.data.*', 'Ext.window.MessageBox', 'Ext.tip.*' ]); Ext.onReady(funct ...

  5. activity四种状态

    finish()  使得activity死掉 activity 部分可见进入pause状态.全部不可见进入stop状态 .界面从死亡——运行(启动) MainAdctivity.onCreate.on ...

  6. 百度自然语言处理api用法

    def words url = "https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?access_token=1111111" param ...

  7. 如何使用git 生成patch 和打入patch【转】

    本文转载自:http://blog.csdn.net/liuhaomatou/article/details/54410361 平时我们在使用git 管理项目的时候,会遇到这样一种情况,那就是客户使用 ...

  8. bzoj4664: Count

    是bzoj4498: 魔法的碰撞的哥哥题,我只写了一种 不一样的地方在于贡献有负数,第三维要保存的不能仅仅是0~L,这样空间会炸裂 考虑如何把贡献变成正的 假如要求最优解,那么一定是按顺序排,混乱度为 ...

  9. 探讨Ajax中有关readyState(状态值)和status(状态码)的问题

    先看下面一段代码,然后给大家详细介绍,Ajax中有关readyState(状态值)和status(状态码)的问题,具体内容如下所示: var getXmlHttpRequest = function ...

  10. 类、对象(java基础知识六)

    1.Java约定俗成 java约定俗成 1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写 2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用 ...