hdu5568 sequence2 dp+大数

Posted 文竹balala

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu5568 sequence2 dp+大数相关的知识,希望对你有一定的参考价值。

题意:给n和m,和 n个数求n个数中有多少个不同的长度为m的数列且严格递增

分析: 题意很容易理解,也很容易想到dp,dp[i][k] += sum(dp[j][k-1]),其中j<i&&a[i]>a[j];

但是对本题来讲很容易WA,搜了题解才知道要用大数

然后就是开始了我写大数的悲催之路,也可能是受网上的代码的影响,自己写出来的大数四不像,改了好久才发现错误

个人感觉写简单的大数

具体思路看代码.


#include <cstdio>
#include <cstring>
#include <iostream>
#include <cctype>
#include <stack>
#include <algorithm>

using namespace std;

const int maxn = 105;
const int mode = 100000000;
struct node

    int sum[105];
    int len;
    node()//构造函数
    
        len = 1;//初始长度都为1,内容为0
        memset(sum, 0, sizeof(sum));
    
    void add(node a)
    
        int re = 0;
        int max_len = max(len, a.len);
        for (int i = 0; i < max_len; i++)
        
            int tmp = re + sum[i] + a.sum[i];//模拟手动加法的过程,不断向前进位
            sum[i] = tmp%mode;
            //cout
            re = tmp/mode;
        
        len = max_len;
        while (re != 0)
        
            sum[len] = re%mode;
            len++;
            re /= mode;
        
    
;
node dp[maxn][maxn];
int a[maxn];
int main()

    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n, m;
    while (cin >> n >> m)
    
        memset(dp, 0, sizeof(dp));
        node ans;
        for (int i = 0; i < n; i++)//dp[i]1]都置为1
        
            scanf("%d", a+i);
            dp[i][1].len = 1;
            dp[i][1].sum[0] = 1;
        
        for (int i = 0; i < n; i++)
        
            for (int j = 0; j < i; j++)
            
                if (a[i] > a[j])
                
                    for (int k = 2; k <= m; k++)
                        dp[i][k].add(dp[j][k-1]);
                
            
        

        for (int i = 0; i < n; i++)
            ans.add(dp[i][m]);
        printf("%d", ans.sum[ans.len-1]);
        for (int i = ans.len-2; i >= 0; i--)
            printf("%08d", ans.sum[i]);
        cout << endl;
    

    return 0;




以上是关于hdu5568 sequence2 dp+大数的主要内容,如果未能解决你的问题,请参考以下文章

HDU1502 Regular Words DP+大数

HDU 5241 Friends (大数)

hdu-1042(大数+万进制)

hdu-1041(大数模板)

hdu2302(枚举,大数取模)

hdu1212(大数取模)