专栏文章

题解:CF913C Party Lemonade

CF913C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip3czsy
此快照首次捕获于
2025/12/03 05:29
3 个月前
此快照最后确认于
2025/12/03 05:29
3 个月前
查看原文

题意

nn 杯柠檬汁,每杯柠檬汁的体积为 2i12^{i-1} 升,价格为 cic_i 卢布,问你要买 LL 升,最少要花多少卢布。

思路

我们知道如果 2×cici+12 \times c_i \le c_{i+1} ,我们就会买 22 瓶价格为 cic_i 的柠檬汁,而不是买价格为 ci+1c_{i+1} 的柠檬汁。
我们假设购买大于等于 xx 件为最优解,假设购买了 yy 件也为最优解,我们从 xxyy 的二进制位从高位往低位看,如果某一位 xxyy 的二进制位不同,我们就从这个地方找最优解。
贴代码
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 条评论,欢迎与作者交流。

正在加载评论...