2017 ACM-ICPC 亚洲区(南宁赛区)网络赛-L. The Heaviest Non-decreasing Subsequence Problem

来源:互联网 发布:php判断水仙花数 编辑:程序博客网 时间:2024/06/06 04:16

DP题,我用<挑战程序设计竞赛>这本书上的最长上升子序列模板(时间复杂度nlogn)的思想做的,具体看代码吧。
代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const int maxn=2*1e6+10;const int maxm=3*1e5;int dp[maxn];int val[maxm],ans[maxm]; int main(){    int n;    int tot=0;    while(scanf("%d",&n)==1)    {        if(n<0)        continue;        if(n>=10000)        val[tot]=5,ans[tot]=n-10000;        else        val[tot]=1,ans[tot]=n;        tot++;    }     int len=tot*5+10;    fill(dp,dp+len,INF);    for(int i=0;i<tot;i++)    {        int *p;        p=upper_bound(dp,dp+len,ans[i]);        while(val[i]--)        {            *p=ans[i];            p++;        }    }    printf("%d\n",lower_bound(dp,dp+len,INF)-dp);}
阅读全文
0 0
原创粉丝点击