传送门,
题目大意:
有一串不递减序列的序列砝码(从第三个开始,每个砝码质量最少是前两个砝码的和),要求用天平秤重,给出天平的最大承重量,砝码数量和砝码的重量,求最大的称量数。
思路:求最大称量数就相当于求多少个数拼成一个最大的数,那就可以用到从大到小的挑选(优化一),如果大的这个可以。前面一定有砝码可以凑成这个大的数,而我们直接选这个大的数的话,就不用再搜索了,然后对于从后往前面选的话,可以再进行一次优化,如果已经选择的砝码的质量加上再选择第i个砝码加上之前所有的砝码的质量小于最大承重量的时候,我们就可以一次性选择i包括i之前全部的砝码质量,这里就用到了前缀和。然后更新最大值,return即可。然后对于这个问题也可以简化为选货物,我只能选或者不选,搜索的方向就很明确了,上代码。快读,没想到吧,哈哈哈。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define std std::ios::sync_with_stdio(0)
#define mem(a,b) memset(a,b,sizeof(a));
const int maxn =1e3+10;
ll w[maxn],sum[maxn];
int C,n;
ll ans=0;
inline void read(ll& x)
{
int f = 1; x = 0; char s = getchar();
wh