【Codeforces】913C Party Lemonade (贪...)。

http://codeforces.com/contest/913/problem/C

这个题和以前见过的有点不一样,可以重复选择,这个有点emmm

首先将a数组优化,举个例子,如果1L20元,2L50元,那么将a[1]赋值为40,而不是50。

之后就是进行选择,从体积多的开始选择。

num 表示 全部选择V升的饮料,尽可能地满足need,需要的V升饮料的数量,可能小于need,可能等于need。

ans 表示在上一个状态的基础上进行比较(...)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
int a[35]; 
ll ans = 9223372036854775807;
int main ()
{
	int i,n,need;
	cin >> n >> need;
	cin >> a[0];
	for(i=1;i> a[i];
		a[i] = min(a[i],2*a[i-1]);
	}
	/*
	for(i=0;i=0;i--)
	{
		V = pow(2,i);
		num = need/V;
		//cout << "V = " << V << endl;
		//cout << "num = " << num << endl;
		need -= num*V;
		//cout << "need = " << need << endl;
		//cout << "sum = " << sum << endl;
		//cout << "ans = " << ans << endl;
		ans = min(sum+(num+1)*a[i],ans);
		sum += num*a[i];
		//cout << "sum = " << sum << endl;
		//cout << "ans = " << ans << endl;
		//cout << "---------------------\n";
	}
	sum = min(ans,sum);
	cout << sum << endl;
	return 0;
}

Input

4 12

20 30 70 90

Output

150

Input

4 3

10 100 1000 10000

Output

30

【Codeforces】913C Party Lemonade (贪...)。_第1张图片    【Codeforces】913C Party Lemonade (贪...)。_第2张图片

你可能感兴趣的:(Codeforces)