1028: 可乐

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
	int c,v;
	double q;
}T[35];
bool cmp(node a, node b ){
	return a.q<b.q;
}
int main(){
	int n ,L;
	while(scanf("%d%d",&n,&L)!=EOF){
		for(int i=0;i<n;i++){
			scanf("%d",&T[i].c);
			T[i].v = 1<<i;
			T[i].q =1.0*T[i].c/T[i].v;
		}
		sort(T,T+n,cmp);
		int need=L;
		ll ans1=0; ll ans2 =LLONG_MAX;
		for(int i=0;i<n;i++){
			ll num = need/T[i].v;
			ans1+= num*T[i].c;
			need %= T[i].v;
			if( need ==0){
				break;
			}
			ans2 =min(ans2,ans1+T[i].c);
		}
		if(need) printf("%lld\n",ans2);
		else printf("%lld\n",min(ans1,ans2));
	}
	return 0;
}
posted @ 2026-03-04 02:05  peter_shen  阅读(3)  评论(0)    收藏  举报