专栏文章
题解:CF913C Party Lemonade
CF913C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip3czsy
- 此快照首次捕获于
- 2025/12/03 05:29 3 个月前
- 此快照最后确认于
- 2025/12/03 05:29 3 个月前
题意
有 杯柠檬汁,每杯柠檬汁的体积为 升,价格为 卢布,问你要买 升,最少要花多少卢布。
思路
我们知道如果 ,我们就会买 瓶价格为 的柠檬汁,而不是买价格为 的柠檬汁。
我们假设购买大于等于 件为最优解,假设购买了 件也为最优解,我们从 与 的二进制位从高位往低位看,如果某一位 与 的二进制位不同,我们就从这个地方找最优解。
贴代码
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,l,len,c[35],ans,x[35];
signed main()
{
scanf("%d%d",&n,&l);
while(l)
{
x[len++]=l&1;
l>>=1;
}
for(int i=0;i<n;i++)
{
scanf("%lld",&c[i]);
if(i) c[i]=min(c[i],c[i-1]<<1);
}
for(int i=n;i<len;++i) c[i]=c[i-1]<<1;
for(int i=0;i<max(n,len);i++)
{
ans=min(ans,c[i]);
if(x[i]) ans+=c[i];
}
printf("%lld\n",ans);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...