cf1283E——贪心
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf1283E——贪心相关的知识,希望对你有一定的参考价值。
想了下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——贪心的主要内容,如果未能解决你的问题,请参考以下文章