zoukankan      html  css  js  c++  java
  • HDU 2372 El Dorado(DP)

    HDU 2372

    大意:

    给你一个长度为n的数列,求极差小于k的最长的上升数列的长度。

    思路:

    DP,循环k,每次求一个最长上升子序列。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define LL __int64
     4 
     5 int n, m;
     6 int a[110];
     7 LL dp[110][110];
     8 
     9 void Solve()
    10 {
    11     while(~scanf("%d%d", &n, &m))
    12     {
    13         memset(dp, 0, sizeof(dp));
    14         if(!n && !m)
    15         {
    16             break;
    17         }
    18         for(int i = 0; i < n; ++i)
    19         {
    20             scanf("%d", &a[i]);
    21         }
    22         for(int i = 0; i < n; ++i)
    23         {
    24             dp[i][1] = 1;
    25         }
    26         for(int j = 2; j <= m; ++j)
    27         {
    28             for(int i = j-1; i < n; ++i)
    29             {
    30                 for(int k = j-2; k < i; ++k)
    31                 {
    32                     if(a[i] > a[k])
    33                     {
    34                         dp[i][j] += dp[k][j-1];
    35                     }
    36                 }
    37             }
    38         }
    39         LL sum = 0;
    40         for(int i = m-1; i < n; ++i)
    41         {
    42             sum += dp[i][m];
    43         }
    44         printf("%I64d
    ", sum);
    45     }
    46 }
    47 
    48 int main()
    49 {
    50     Solve();
    51 
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    命令
    碎片知识
    驱动问题
    网络基础知识普及
    面向设计大作业——公司餐厅
    面向对象--购物车
    OO之接口-DAO模式代码阅读及应用
    有理数类的定义
    图知识点总结
    Java课程设计总结
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3641729.html
Copyright © 2011-2022 走看看