码迷,mamicode.com
首页 > 其他好文 > 详细

cf1283E——贪心

时间:2020-01-02 19:07:04      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:col   ++   --   i++   策略   移动   style   div   lse   

想了下dp的做法感觉不太行,我也只配做div3了哎

求最小值的策略:前面没有就把当前的所有人都移到后面去,前面有人就挪到前面去

求最大值的策略:前面没有就挪一个到前面,然后考虑当前位置,下一个位置

/*
dp[i][0]表示向前移动了,dp[i][1]表示不动,dp[i][2]表示后移 
*/
#include<bits/stdc++.h>
using namespace std;
#define N 200005
int n,a[N],cnt[N],has[N];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i],cnt[a[i]]++;
    for(int i=1;i<=n;i++)if(cnt[i]){
        if(has[i])continue;
        if(has[i-1])continue;
        if(!has[i-1])
            has[i+1]=1;
    }    
    
    int tot=0;
    for(int i=0;i<=n+1;i++)tot+=has[i];
    cout<<tot<<" ";
    
    memset(has,0,sizeof has);
    
    for(int i=1;i<=n;i++)if(cnt[i]){
        if(!has[i-1])cnt[i]--,has[i-1]=1;
        if(cnt[i]){
            if(has[i])has[i+1]=1;//移到后面 
            else {
                has[i]=1;
                if(cnt[i]>1)
                    has[i+1]=1;
            }
        }
        
    }
    tot=0;
    for(int i=0;i<=n+1;i++)tot+=has[i];
    cout<<tot;
}

cf1283E——贪心

标签:col   ++   --   i++   策略   移动   style   div   lse   

原文地址:https://www.cnblogs.com/zsben991126/p/12134249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!