题解:CF381B Sereja and Stairs
题意
给定
个元素的序列 。 取若干
中元素组成新序列 使得 。 给出一种使得
最大的方案。
分析
考虑贪心。
先从小到大取数,然后再从大到小取。
关注到值域很小(
最后注意一下最大数不能重复选取。
Code
#include<bits/stdc++.h> using namespace std; #define maxn 5003 int cnt[maxn]; vector<int> ans; int main() { int n; cin>>n; for(int i=1, t;i<=n;i++) cin>>t, cnt[t]++; for(int i=1;i<maxn;i++) if(cnt[i]) cnt[ans.emplace_back(i)]--; for(int i=maxn;i;i--) if(cnt[i]&&i!=ans.back()) ans.emplace_back(i); cout<<ans.size()<<'\n'; for(auto i:ans) cout<<i<<' '; }
本文作者:Jimmy-LEEE
本文链接:https://www.cnblogs.com/redacted-area/p/18379543
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步