• P1108 低价购买


     和LIS反着

    本题直接做就行,

    注意计算方案数,不是说找到最大的方案,然后再找比他小的就可以了,还要注意去重,所以再建立一个数组c;记录方案数目

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define int long long
     4 const int maxn = 5e3 + 10;
     5 int n,a[maxn],dp[maxn];
     6 int maxx,c[maxn],ans;
     7 signed main(){
     8     //freopen("in","r",stdin);
     9     ios::sync_with_stdio(0);
    10     cin >> n;
    11     for(int i = 1; i <= n; i++)
    12         cin >> a[i];
    13     for(int i = 1; i <= n; i++){
    14         dp[i] = 1;
    15         for(int j = 1; j < i; j++){
    16             if(a[j] > a[i]){
    17                 dp[i] = max(dp[i],dp[j] + 1);
    18             }
    19         }
    20         maxx = max(dp[i],maxx);
    21     }
    22     for (int i = 1; i <= n; i++) {
    23         if (dp[i] == 1) c[i] = 1;
    24         for (int j = 1; j < i; j++) {
    25             //去重
    26             if (dp[i] == dp[j] && a[i] == a[j])
    27                 c[i] -= c[j];
    28             if (dp[j] + 1 == dp[i] && a[j] > a[i])
    29                 c[i] += c[j];
    30         }
    31     }
    32     for(int i = 1; i <= n; i++){
    33         if(dp[i] == maxx)
    34             ans += c[i];
    35     }
    36     cout << maxx << " " << ans << endl;
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    伍佰《突然的自我》
    .NET常见ORM框架
    并发和压测工具
    底层源码调试工具
    c 冒泡排序
    c 指定范围的质数
    c 筛法列举质数
    c 牛顿法求方程近似解
    c 二分法求方程近似解
    css选择器 及其权重
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12806812.html
Copyright © 2020-2023  润新知