一、题目
二、解法
复杂度允许枚举一类物品选取的个数,我们先枚举花费为 3 3 3的物品个数。
剩余物品能选的最大价值是关于花费为 2 2 2的选取物品个数 x x x呈单峰函数的,因为选少了可能更优,会增大,然后当选的比不选的更差时,就会下降,所以我们可以用三分解决这个问题。但是可能会有平台(函数值相等),但是平台只会出现在下降趋势,出现平台就往小的那边分治就可以了。
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int M = 200005;
#define int long long
int read()
{
int x=0,f=1;char c;
while((c=getchar())<'0' || c>'9') {
if(c=='-') f=-1;}
while(c>=</