zoukankan      html  css  js  c++  java
  • UVa 11375 Matches

    第一次用lrj的高精度类模板,感觉还是很好用的

    c[x]表示数字x需要的火柴根数

    将已经使用的火柴数i看做状态,每添加一个数字x状态就从i转移到i+c[x]

    d[i]表示从节点0到节点i路径的条数,则答案f(n) = d(1) + d(2) + …… + d(n)

    开始的时候不计入0,最后的时候如果n≥6答案再加一

     1 #define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 struct bign
     8 {
     9     int len, s[1000];
    10     bign() { memset(s, 0, sizeof(s)); len = 1; }
    11     bign operator = (const char* num)
    12     {
    13         len = strlen(num);
    14         for(int i = 0; i < len; ++i)
    15             s[i] = num[len - i - 1] - '0';
    16         return *this;
    17     }
    18     bign operator = (int num)
    19     {
    20         char s[1000];
    21         sprintf(s, "%d", num);
    22         *this = s;
    23         return *this;
    24     }
    25     bign (int num) { *this = num; }
    26     bign (const char* num) { *this = num; }
    27     string  str() const
    28     {
    29         string res = "";
    30         for(int i = 0; i < len; ++i)
    31             res = (char)(s[i] + '0') + res;
    32         if(res == "")    res = "0";
    33         return res;
    34     }
    35 
    36     bign operator + (const bign b) const
    37     {
    38         bign c;
    39         c.len = 0;
    40         for(int i = 0, g = 0; g || i < max(len, b.len); ++i)
    41         {
    42             int x = g;
    43             if(i < len)    x += s[i];
    44             if(i < b.len)    x += b.s[i];
    45             c.s[c.len++] = x % 10;
    46             g = x / 10;
    47         }
    48         return c;
    49     }
    50 
    51     bign operator += (const bign& b)
    52     {
    53         *this = *this + b;
    54         return *this;
    55     }
    56 };
    57 
    58 istream& operator >> (istream& in, bign& x)
    59 {
    60     string s;
    61     in >> s;
    62     x = s.c_str();
    63     return in;
    64 }
    65 
    66 ostream& operator << (ostream &out, const bign& x)
    67 {
    68     out << x.str();
    69     return out;
    70 }
    71 
    72 const int maxn = 2000;
    73 bign d[maxn + 10];
    74 int c[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
    75 
    76 int main(void)
    77 {
    78     #ifdef LOCAL
    79         freopen("11375in.txt", "r", stdin);
    80     #endif
    81 
    82     memset(d, 0, sizeof(d));
    83     d[0] = 1;
    84     for(int i = 0; i <= maxn; ++i)
    85         for(int j = 0; j < 10; ++j)
    86             if(!(i==0 && j==0) && i+c[j]<=maxn)
    87                 d[i+c[j]] += d[i];
    88     for(int i = 2; i <= maxn; ++i)
    89         d[i] += d[i-1];
    90     int x;
    91     while(scanf("%d", &x) == 1)
    92     {
    93         if(x < 6)    cout << d[x] << endl;
    94         else    cout << d[x] + 1 << endl;
    95     }
    96     return 0;
    97 }
    代码君
  • 相关阅读:
    PHP中获取当前页面的完整URL
    phpStydy配置memcache扩展
    mac 安装 php nginx mysql
    mysql分表的3种方法
    Apache虚拟主机配置
    Mysql命令行基本操作
    优化数据库对象
    select,epoll的比较
    lucene合并测试的总结
    验证相关度排序是否受查询的多个关键字在内容中相邻紧密程度有关
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3947915.html
Copyright © 2011-2022 走看看