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 ...
随机推荐
- IOS控件:分歧解决其(UILabel 和 IBAction)
#import <UIKit/UIKit.h> @interface demo7_dayViewController : UIViewController { // 用来显示程序结果 IB ...
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem
题目链接:传送门 题目大意:给你n个区间,求任意k个区间交所包含点的数目之和. 题目思路:将n个区间都离散化掉,然后对于一个覆盖的区间,如果覆盖数cnt>=k,则数目应该加上 区间长度*(cnt ...
- A1261. happiness(吴确)[二元组暴力最小割建模]
A1261. happiness(吴确) 时间限制:500ms 内存限制:512.0MB 总提交次数:158 AC次数:72 平均分:56.71 将本题分享到: 查看 ...
- 【BZOJ4590】[Shoi2015]自动刷题机 二分
[BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...
- 手动爬虫之报头及代理封装类(python3)
本人刚刚学习爬虫,见每次都需要添加报头比较繁琐,故将该过程封装为Url_ProxyHelper类,代码如下 import urllib.request as ur class Url_ProxyHel ...
- java根据方法名动态调用invoke方法!
public class Activity { public void deal(String name, long id) { System.out.println(name + id + &quo ...
- Json对象与Json字符串的转化
1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转 ...
- 如何在 window 上面输入特殊字符?
打开 字符映射表 程序 选中任意一个字符,它会在下方显示该字符的 16进制 转换16进制至10进制,并在输入法打开的状态下,按住 Alt 键输入 10 进制数值即可.
- Python爬虫之-Requests
Requests模块 Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了. 它是为另一个时代.另一个互联网所创建的.它需要巨量的 ...
- WEB安全验收参考文档——From Github
文章https://xianzhi.aliyun.com/forum/read/793.html 里面涉及到了web安全验收参考文档: 其实github上老外对此也做过一些整理.详情参考:https: ...