zoukankan      html  css  js  c++  java
  • hdu 2372 El Dorado (dp)

    题目链接

    题意:给n个数字, 求有k个数字的上升子序列有多少种。

    思路:d[i][j]表示 以第i个元素为 子序列的最后一个元素,长度为j的子序列 有多少种。

    比赛的时候 光想着用组合数做了。。。。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 const int maxn = 110;
     8 
     9 __int64 d[maxn][maxn];
    10 int a[maxn];
    11 int main()
    12 {
    13     __int64 ans;
    14     int k, i, j, x, n;
    15     while(cin>>n>>k)
    16     {
    17         if(n==0&&k==0)
    18             break;
    19         memset(d, 0, sizeof(d));
    20         for(i = 0; i < n; i++)
    21             cin>>a[i];
    22         for(i = 0; i < n; i++)
    23             d[i][1] = 1;
    24         for(i = 1; i < n; i++)
    25             for(j = 0; j < i; j++)
    26             {
    27                 if(a[i]>a[j])  //条件是第i个 大于前面的
    28                 {
    29                     for(x = 2; x <= k; x++)
    30                     {
    31                         d[i][x] += d[j][x-1]; //以第i个元素 为子数列的最后一个元素,长为x的子序列,等于 以第j个元素为子序列的最后一个元素,长为x-1的子序列的和
    32                     }
    33                 }
    34             }
    35         ans = 0;
    36         for(i = 0; i < n; i++)
    37             ans += d[i][k];
    38             cout<<ans<<endl;
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    第十一章关联容器
    第十章泛型算法
    第九章
    第八章
    阅读记录
    java.lang.Class阅读笔记
    java.time包阅读笔记
    CLion运行多个main函数
    c++中lower_bound和upper_bound中的comp参数
    如何写dfs
  • 原文地址:https://www.cnblogs.com/bfshm/p/3632212.html
Copyright © 2011-2022 走看看