Problem A. Chemistry

Input file: chemistry.in

Output file: chemistry.out

Time limit: 1 seconds

Memory limit: 256 megabytes

香香手中有n瓶化学药剂,每瓶化学药剂都有一个能量值ai。现在她想把这些药剂的能量值全部变成一样的,她有两台机器,其中一台机器一次可以把一瓶药剂的能量值翻倍,ai变成2ai,另一台机器一次可以把一瓶药剂的能量值变为一半,ai变成。

然而每台每次启动都需要单位1的能量,她所储存的能量不多了,请你帮她计算一下用最少的能量完成这个任务。

Input

第一行输入一个n(1 <= n <= 10^5 )

第二行输入n个数,用空格隔开,表示每瓶药剂的能量值ai

(1 <= ai <= 10^5)

Output

输出一行,表示最少需要的能量值是多少。

Sample test(s)

input

3
4 8 2

output

2

input

3
3 5 6

output

5

样例解释:

第一个样例能量值全部为成4 ,第二个样例全部变为1。

范围:

对于10% , n = 2

对于30% , n <= 100

对于另10% , ai <= 1000

对于100% , n <= 10^5 , ai <= 10^5

  分析:

  明显的DP,f[i][j]表示前i个数全部变成j所要耗费的能量,然后就是各种优化。。。。。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MAX=;
const int inf=0x3f3f3f3f;
int a[MAX];
int b[MAX],b2[MAX];
int c[];
int f[][];
int may[];
int N;
int ANS=inf;
int MIN;
int main(){
// freopen("chemistry.in","r",stdin);
// freopen("chemistry.out","w",stdout);
scanf("%d",&N);
for(int i=;i<=N;i++) scanf("%d",&a[i]);
sort(a+,a+N+);
for(int i=;i<=N;i++) b[i]=a[i],b2[i]=a[i]; for(int i=;i<=N;i++){//筛出来可能存在的数字
may[b[i]]++; while(b[i]*<=*a[N]){
may[b[i]*]++;
b[i]*=;
}
while(b2[i]/>=){
may[b2[i]/]++;
b2[i]/=;
} } int now=;
for(int i=;i<=*a[N];i++){
if(may[i]==N){//不为偶数的
now++;
c[now]=i;
}
} for(int k=;k<=*a[N]; ){
if(may[k]!=N){
now++;
c[now]=k;
}
k<<=;
}
//f[i][j]表示前i个数,全部变成c[j]时,所需的能量 for(int j=;j<=now;j++){
for(int i=;i<=N;i++){//DP
int num=c[j];
int ans=; if(may[num]==N){//序列中的每个数都可以直升直降得到 if(num==a[i]) ans=;
if(num>a[i]){
int x=a[i];
while(x!=num){
x*=;
ans++;
}
}
if(num<a[i]){
int x=a[i];
while(x!=num){
x/=;
ans++;
}
}
}
//*********
else{//有的数字必须先降再升可以达到
int x=a[i];
if(num==a[i]) ans=;
if(num>a[i]){
while(x!=num){
x<<=;
ans++;
if(x>num){
ans=inf;
break;
}
}
}
if(ans==&&num!=a[i])
ans=inf;
if(x!=num){
int ans1=;
int x=a[i];
while(x!=){
if(x==num) break;
else{
x>>=;
ans1++;
}
}
while(x!=num){
x<<=;
ans1++;
}
ans=min(ans,ans1);
}
}
f[][j]=f[][j]+ans;
f[][j]=f[][j];
f[][j]=;
if(i==N)
ANS=min(ANS,f[][j]);
}
} cout<<ANS;
return ;
}

Chemistry的更多相关文章

  1. CF 445B DZY Loves Chemistry(并查集)

    题目链接: 传送门 DZY Loves Chemistry time limit per test:1 second     memory limit per test:256 megabytes D ...

  2. 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry

    C. Amr and Chemistry Problem's Link: http://codeforces.com/problemset/problem/558/C Mean: 给出n个数,让你通过 ...

  3. DZY Loves Chemistry 分类: CF 比赛 图论 2015-08-08 15:51 3人阅读 评论(0) 收藏

    DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. CodeForces 445B DZY Loves Chemistry

    DZY Loves Chemistry Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  5. Codeforces Round #312 (Div. 2) C. Amr and Chemistry 暴力

    C. Amr and Chemistry Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/558/ ...

  6. HDU-5347 MZL's chemistry

    http://acm.hdu.edu.cn/showproblem.php?pid=5347 MZL's chemistry Time Limit: 2000/1000 MS (Java/Others ...

  7. Codeforces Round #312 (Div. 2) C.Amr and Chemistry

    Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...

  8. cf445B DZY Loves Chemistry

    B. DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standa ...

  9. hdu5347 MZL's chemistry(打表)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's chemistry Time Limit: 2000/1000 MS ...

  10. hdu 5625 Clarke and chemistry

    Problem Description Clarke is a patient with multiple personality disorder. One day, Clarke turned i ...

随机推荐

  1. SurvivalShooter学习笔记(八.敌人管理器)

    敌人管理器:管理敌人的随机出生点创建 在场景中建立几个空物体,作为敌人的出生点 public class EnemyManager : MonoBehaviour { public PlayerHea ...

  2. MySQL数据库安装文件夹与配置文件简易说明

    1.MySQL安装文件夹 bin:存放着可执行文件 include:存放头文件 lib:存放库文件 share:存放字符集.语言等信息 2.配置文件 my.ini:MySQL软件正在使用的配置文件 m ...

  3. H5页面在微信中禁止下拉露出网页

    H5页面在微信中禁止默认事件的执行,js添加代码 $(function () { /************微信h5页面禁止下拉露出网页来**************/ $('body').on('t ...

  4. 《挑战程序设计竞赛》2.6 数学问题-辗转相除法 AOJ0005 POJ2429 1930(1)

    AOJ0005 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0005 题意 给定两个数,求其最大公约数GCD以及最小公倍数LCM. ...

  5. tomcat8以上管理页面提示403问题

    修改conf/tomcat-users.xml <role rolename="manager"/> <role rolename="manager-g ...

  6. Spring-Spring IoC容器

    IoC容器 Spring容器是Spring框架的核心.容器将创建对象,把它们连接在一起,配置它们,并管理它们的整个生命周期从创建到销毁.Spring容器使用依赖注入(DI)来管理组成一个应用程序的组件 ...

  7. Angular学习笔记—基础(转载)

    创建简单组件 新建组件 $ ng generate component simple-form --inline-template --inline-style # Or $ ng g c simpl ...

  8. django 中模板语言的各种用法

    模板 1.视图中使用模板 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户 1.普通方法:HTML被直接硬编码在 P ...

  9. python基础(数字、字符串、布尔值、字典数据类型简介)

    一 执行第一个python程序 1.下载安装python2.7和python3.6的版本及pycharm,我们可以再解释器中输入这样一行代码: 则相应的就打出了一句话.这里的print是打印的意思.你 ...

  10. Java集合(9):ConcurrentHashMap

    一.ConcurrentHashMap介绍 我们可以在单线程时使用HashMap提高效率,而多线程时用Hashtable来保证安全.但是,HashMap中未进行同步考虑,而Hashtable则使用了s ...