• hdu1023 Train Problem II


    结题思路很容易想到递归,用记忆化搜索方式寻找答案。

    由于ans可能非常大,用c++需要自己写加法器。

    acm.hdu.edu.cn/showproblem.php?pid=1023

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 typedef __int64 LL;
     7 const int maxn = 150 + 10;
     8 char buffer[maxn * maxn][maxn];
     9 LL f[maxn][maxn];
    10 int n, N;
    11 
    12 void add(int lhs, int rhs, int dest){
    13     int d = 0;
    14     for(int i = maxn - 2; i >= 0; i--){
    15         int j = buffer[lhs][i] + buffer[rhs][i] + d;
    16         buffer[dest][i] = j % 10;
    17         d = j / 10;
    18     }
    19 }
    20 
    21 int solve(int s, int q){
    22     if(f[s][q] != -1) return f[s][q];
    23     if(!q) return f[s][q] = 0;
    24     if(s){
    25         int l1 = solve(s + 1, q - 1), l2 = solve(s - 1, q);
    26         add(l1, l2, N);
    27         N++;
    28         return f[s][q] = N - 1;
    29     }
    30     return f[s][q] = solve(s + 1, q - 1);
    31 }
    32 
    33 void print(int i){
    34     int low = maxn - 1;
    35     for(int j = 0; j < maxn - 1; j++){
    36         if(buffer[i][j]){
    37             low = j;
    38             break;
    39         }
    40     }
    41     for(int j = low; j < maxn - 1; j++) putchar(buffer[i][j] + '0');
    42     putchar('
    ');
    43 }
    44 
    45 int main(){
    46     memset(f, -1, sizeof f);
    47     memset(buffer, 0, sizeof buffer);
    48     buffer[0][maxn - 2] = 1;
    49     N = 1;
    50     while(~scanf("%d", &n)){
    51         int ans = solve(0, n);
    52         print(ans);
    53     }
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    redis配置认证密码以及远程访问
    Mybatis缓存配置
    Node.Js安装
    1.ArcGis几何图形之几何计算
    MessagePack 新型序列化反序列化方案
    Redis(六)-数据类型
    Redis(五)-数据库
    Redis(四)-配置
    Redis(三)-Ubuntu下安装
    Redis(二)-Win系统下安装
  • 原文地址:https://www.cnblogs.com/astoninfer/p/4747226.html
Copyright © 2020-2023  润新知