题意:给你一个数组,可以从中选区若干种元素,但每种元素选区的个数前一种必须是后一种的2倍,选区的任意2种元素不能相同,问可以选取最多的元素个数是多少?

思路1(乱搞):记录一下每种元素的个数,然后暴力枚举最少的元素个数,计算符合题意的最优情况。

代码:

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<set>
#include<bitset>
#include<vector>
#include<iostream>
#define INF 0x3f3f3f3f
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pb push_back
using namespace std;
const int maxn=1000010;
map<int,int> mp;
map<int,int>::iterator it;
int a[maxn],b[maxn],cnt;
int v[maxn];
int main(){
int n,ans=0;
// freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
mp[a[i]]++;
}
for(it=mp.begin();it!=mp.end();it++){
b[++cnt]=it->second;
}
sort(b+1,b+1+cnt);
for(int i=1;i<=b[cnt];i++){
int now=0,sum=i;
while(now<=n){
int pos=lower_bound(b+1,b+1+cnt,sum)-b;
while(pos<=cnt&&v[pos]==i)pos++;
v[pos]=i;
if(pos>cnt)break;
now+=sum;
sum=sum+sum;
}
ans=max(ans,now);
}
printf("%d\n",ans);
}

 思路2:DP 设dp[i]为最少元素个数为i时的最优解,将元素的个数从小到大排序后,从后往前更新答案。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=200010;
int dp[maxn*2];
map<int,int> mp;
int a[maxn];
int main(){
int n,ans=0,cnt=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
mp[a[i]]++;
}
for(auto i:mp){
a[++cnt]=i.second;
}
sort(a+1,a+1+cnt);
for(int i=cnt;i>=1;i--)
for(int j=1;j<=a[i];j++){
dp[j]=max(dp[j],j+dp[j*2]);
ans=max(ans,dp[j]);
}
printf("%d\n",ans);
}

  

Codeforces 1077E (二分乱搞或者dp)的更多相关文章

  1. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  2. [NOIP模拟赛][并没有用二分][乱搞AC]

    圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到达 ...

  3. bzoj1992鬼谷子的钱袋(二分乱搞 二进制)

    1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3223  Solved: 2333 Descriptio ...

  4. [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)

    传送门 可以二分边长 然后另开两个数组,把x从小到大排序,把y从小到大排序 枚举x,可以得到正方形的长 枚举y,看看从这个y开始,往上能够到达多少个点,可以用类似队列来搞 其实发现算法的本质之后,x可 ...

  5. SCU 4437 Carries(二分乱搞)题解

    题意:问任意两对ai,aj相加的总进位数为多少.比如5,6,95分为(5,6)(5,95)(6,95),进位数 = 1 + 2 + 2 = 5 思路:显然暴力是会超时的.我们可以知道总进位数等于每一位 ...

  6. Codeforces 724C [坐标][乱搞][模拟]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 从(0,0)出发与x轴正方向呈45度角的射线,在给定的矩形区域内不断发射,直到射入矩形的某个角停止. 给出多个坐标,问光线最早经过某坐标的时间. ...

  7. Codeforces 723c [贪心][乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一个n和m. 第二行给n个数. 每次操作可以把n个数中的任何一个数替代为别的数,问最少的操作次数使得1.2.3.4.5...m中的数出现的次数 ...

  8. 【bzoj5085】最大(二分+乱搞)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5085 这道题我们可以先二分答案,然后转化为判定是否有四角权值>=mid的矩形. ...

  9. codeforces 1041 c 乱搞

    #include <bits/stdc++.h> using namespace std; struct po { int val; int id; }; po a[]; vector&l ...

随机推荐

  1. 冒泡排序的PHP实现 Bubble Sort

    冒泡排序Bubble Sort的PHP实现.代码中函数说明: out_arr,用于将数组输出成一个字符串,以便查看 bubblesort,第一种实现方案,从后往前依次选出需要的值,这里是较大的 bub ...

  2. Memcache 笔记(2)

    一.Memcache概述出现的原因:随着数据量的增大,访问的集中,使得数据库服务器的负担加重,数据库响应恶化,网站显示延迟等 memcache:是高性能的分布式内存缓存服务器.通过缓存数据库的查询结果 ...

  3. OUTlook无法预览xls文件

    outlook可以正常预览doc,pdf,jpg格式的附件,但是xls和xlsx格式就是不能预览.找了好多网络上的办法,都是不行,最终还是找一个靠谱的办法,记录一下 这个方法非常有用:如题, 本人安装 ...

  4. HTML中可以连接资源的标签集合

    1.<a>标签,href属性指示链接的目标,可以是HTML也可以是内部css样式.<a href="http://www.w3school.com.cn"> ...

  5. 24 Python 对象进阶

    isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) issu ...

  6. SCM-MANAGER 应用

    什么是SCM-MANAGER 基于Web的,集成了  Git. Mercurial .Subversion  多种代码管理工具的源代码管理平台 它有什么优点 简易安装 不需要破解配置文件,完全可配置的 ...

  7. Memcache mutex设计模式

    Memcache mutex设计模式 转自:https://timyang.net/programming/memcache-mutex/ 场景 Mutex主要用于有大量并发访问并存在cache过期的 ...

  8. MySql 创建函数 Error Code : 1418

    查看日志信息:show variables like 'log_%';显示'log_bin'.'log_bin_trust_function_creators'等状态 解决方法: 关闭binary l ...

  9. [BZOJ1022][SHOI2008]小约翰的游戏

    bzoj luogu sol 显然这个玩意儿和普通\(Nim\)游戏是有区别的. 形式化的,\(Nim\)游戏的关键在于决策集合为空者负,而这里的决策集合为空者胜. 所以就显然不能直接用\(SG\)函 ...

  10. Oracle job procedure 存储过程定时任务(转自hoojo)

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...