Chemistry
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的更多相关文章
- CF 445B DZY Loves Chemistry(并查集)
题目链接: 传送门 DZY Loves Chemistry time limit per test:1 second memory limit per test:256 megabytes D ...
- 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry
C. Amr and Chemistry Problem's Link: http://codeforces.com/problemset/problem/558/C Mean: 给出n个数,让你通过 ...
- 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 ...
- CodeForces 445B DZY Loves Chemistry
DZY Loves Chemistry Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64 ...
- 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/ ...
- HDU-5347 MZL's chemistry
http://acm.hdu.edu.cn/showproblem.php?pid=5347 MZL's chemistry Time Limit: 2000/1000 MS (Java/Others ...
- Codeforces Round #312 (Div. 2) C.Amr and Chemistry
Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...
- cf445B DZY Loves Chemistry
B. DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standa ...
- hdu5347 MZL's chemistry(打表)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's chemistry Time Limit: 2000/1000 MS ...
- hdu 5625 Clarke and chemistry
Problem Description Clarke is a patient with multiple personality disorder. One day, Clarke turned i ...
随机推荐
- 直接下载jdk压缩包方式安装
分为下面5个步骤 1.官网下载JDK 2.检查是否安装jdk,解压缩,放到指定目录 3.配置环境变量 4.设置系统默认JDK 5. 测试jdk 1.官网下载JDK 地址: http://ww ...
- JavaScript------Throw和Try-Catch的使用
function test() { try { var x = document.getElementById("demo").value; if (x == "&quo ...
- layoutSubviews何时调用的问题
本文转载至 http://www.cnblogs.com/pengyingh/articles/2417211.html 今天跟旺才兄学习了一下UIView的setNeedsDisplay和setNe ...
- 认识tornado(二)
前面我们对 Tornado 自带的 hello world 作了代码组织上的解释,但是没有更加深入细致地解释.这里我们直接从main()函数开始,单步跟随,看看tornado都干了些什么. 下面是 m ...
- python中的self
1.首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中se ...
- mac下面安装mysql
参考http://www.cnblogs.com/lakeslove/p/6280404.html 关于msyql5.7,安装时最大的改变就是有了一个默认密码 我安装的是mysql-5.7.17-ma ...
- Oracle http://127.0.0.1:8080/apex无法访问解决方案
造成无法访问的原因多数情况是由于Oracle中TNS的配置发生了改变. 造成TNS配置有问题的原因可能是:1. 修改了计算机名 2. 修改了IP 默认oracleXE 启动OracleXETNS ...
- php strtok()函数用法,及使用时遇到的问题
strtok()函数:用来将一段字符串分割为子字符串 strtok(string $str, string $token) strtok( string $token) //仅第一次调用$str,以后 ...
- spring 攻略
1.5 指定Bean引用 为了Bean之间相互访问,在Bean配置文件中通过<ref>元素为Bean属性或构造程序参数指定Bean引用. <property name="p ...
- 2.Access the mongo Shell Help-官方文档摘录
总结: 1.使用help可以查看帮助信息db.help() help等 2.查看对应的实现方法.比如 test@gzxkvm52$ db.updateUser function (name, upd ...