zoukankan      html  css  js  c++  java
  • hrbustoj 2362 Aggie’s Tasks(带权LIS)

    题意:给你一列数,让你求上升序列,使权值最大

    思路:LIS思路,(总有人骗我说是类似于RMQ问题,这有像的地方么,其他人还是强,现场过掉,第一次近距离看到fls,好强)但窝感觉这题题的数据是不是有点,为什么不会爆LL(好奇脸),其他的都是同LIS,只能说是真的用了LIS的思想,对于困难的权值,转变与有权值个困难,但并没有增加序列长度,而是在二分到位置后,向后维护权值个长度,这个思路(虽然说还是LIS的思路维护最小,但还是感觉好强)

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn=1e5+7;
    int t,n,a[maxn],val[maxn];
    int dp[maxn];
    
    int main()
    {
        int t,n,x;
        scanf("%d",&t);
        while(t--)
        {
            memset(a,0,sizeof(a));
            memset(dp,0x3f,sizeof(dp));
            scanf("%d",&n);
            for(int i=0; i<n; i++)
                scanf("%d",&a[i]);
            for(int i=0;i<n; i++)
                scanf("%d",&val[i]);
            int len=0,sum=0;
            for(int i=0; i<n; i++)
            {
                int p=lower_bound(dp,dp+len,a[i])-dp;
    //            printf("test %d == %d
    ",i,p);
                for(int j=p; j<p+val[i]; j++)
                {
                    dp[j]=a[i];
                    if(j==len)len++;
                }
            }
            printf("%d
    ",len);
        }
        return 0;
    }
  • 相关阅读:
    队列安排
    杂物
    最大数
    牛券
    斐波那契数列 !有疑惑
    方格取数
    阶乘之和-魏国
    过河卒
    二分查找算法(转)
    求整数的二进制表示中1的个数 (转)
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/8506445.html
Copyright © 2011-2022 走看看