1028: 可乐

队列,栈,优先队列没有clear函数,使用{}清空
image

#include <bits/stdc++.h>
using namespace std;
const int N=35;
int n,l;
typedef long long ll;
ll c[N];
struct node{
	int v;
	ll c;
	double w;
	bool operator<(const node& a)const{
		return w>a.w;
	}
};
priority_queue<node> que;
int main(){
	while(scanf("%d%d",&n,&l)!=EOF){
	    que ={};
		int v=1;
		for(int i=1;i<=n;i++){
			scanf("%lld",&c[i]);
			que.push({v,c[i],1.0*c[i]/v});
			v*=2;
		}
		ll min1= LLONG_MAX;
		ll sum=0;
		while(!que.empty()){
			auto now=que.top();
		//	cout<<now.v;
			que.pop();
			sum = sum + l/now.v*now.c;
		//	cout<<" "<<sum<<" ";
			l=l%now.v;
		//	cout<<l<<" ";
			if(l==0){
				min1 =min(sum,min1);
				break;
			}else{
				min1 = min(sum+now.c,min1);
			}
	//		cout<<min1<<endl;
		}
// 		while(!que.empty()){  //也可以这样清空优先队列
// 			que.pop();
// 		}
		printf("%lld\n",min1);
	}
	return 0;
}
posted @ 2026-03-04 02:05  peter_shen  阅读(8)  评论(0)    收藏  举报