【正经题解】买铅笔
2024-02-22 14:48:05
发布于:浙江
6阅读
0回复
0点赞
只买一种包装的,所以只要算出每种包装需要花的钱就可以了。
第一个想到的办法是模拟累加直到买到需要的数量
介绍一种实用的优化:
位运算
使用位运算来进行大幅度累加,是倍增的思想
等同于 *
#include<cstdio>
using namespace std;
int i,j,k,n,m,w,ans;
int main(){
scanf("%d",&n);
for(i=0;i<3;i++){
scanf("%d%d",&j,&k);m=j;w=k;//输入并存下初始的价格与数量
while(j<n){j<<=1;k<<=1;}//价格与数量不断*2直到数量大于n
while(j>n){j-=m;k-=w;}//*2有可能导致买太多了,减去一些
while(j<n){j+=m;k+=w;}//减去之后又可能太少了,加上一些
//其实就是大幅度地上调,然后做一些微调
if(k<ans||ans==0)ans=k;//判断是否是最小花费
}
printf("%d\n",ans);
return 0;//输出并返回
}
这里空空如也
有帮助,赞一个