牛客小白月赛34(待补全,等期末考完

dd爱科学1.0

最长不下降子序列。。。

dd爱科学2.0

每次改成啥不知道,要求结果最大化

一看1e6,暴力dp上

int a[N],n,dp[N][30];
char s[N];
void solve(){
    cin>>n;cin>>s+1;
    for(int i=1;i<=n;++i){
        a[i]=s[i]-'A'+1;
    }
    for(int i=0;i<=n;++i){
        for(int j=0;j<=26;++j){
            dp[i][j]=inf;        
        }
    }
    for(int i=1;i<=26;++i){
        dp[1][i]=abs(a[1]-i);
    }
    for(int i=2;i<=n;++i){
        for(int j=1;j<=26;++j){
            for(int k=1;k<=j;++k){
                dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(j-a[i]));
            }
        }
    }
    int ans=inf;
    for(int i=1;i<=26;++i){
        ans=min(dp[n][i],ans);
    }
    cout<<ans<<endl;
}

dd爱框框

找一段最短的区间,区间和大于等于x,随便尺取一下

int p1,p2,sum=0,n,x,a[N],l,r;
void solve(){
    cin>>n>>x;int ans=n;
    for(int i=1;i<=n;++i)cin>>a[i]; 
    p1=1;p2=0;
    while(p2<=n){
        p2++;sum+=a[p2];
        while(p2<=n&&sum<x){
            p2++;
            sum+=a[p2];
        }
        while(p1<=n&&sum-a[p1]>=x){
            sum-=a[p1];
            p1++;
        }
        if(ans>p2-p1+1){
            ans=p2-p1+1;
            l=p1;r=p2;
        }
    }
    cout<<l<<" "<<r<<endl;
}
原文地址:https://www.cnblogs.com/PdrEam/p/14833551.html