最低成本的目标
题目描述
现在有一个数初始为0,花费1点成本使得这个数+1,花费50点成本使这个数+100,你可以进行若干次上述的两种操作,在最后可以花费500点成本使该数翻倍。问至少需要多少成本使得这个数字达到目标数N或N以上。
输入格式
目标数N(N <= 30000)
输出格式
最小成本数
样例输入
101
样例输出
51
思路:
注意读题,翻倍只能最后一次翻倍,之前做题就是没仔细读题没看出问题。其实也有更简便的方法,直接if else能够判断出来的。
补:后台数据补了5001,所以n要开成double类型,判断是不是整数,不是整数要多加1.
#include<bits/stdc++.h>
using namespace std;
main(){
int a=0,b=0,c=0;
double n;
cin>>n;
if(n>2000){
n=n/2.0;
c++;
}
while(n>50){
n-=100;
b++;
}
if(n>0){
int x=n;
if(x==n){
a=n;
}else{
a=n+1;
}
}
//cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;
cout<<a+b*50+c*500<<endl;
}