搜索剪枝。Scales S详解

该博客介绍了如何利用搜索剪枝策略解决序列砝码的最大称量问题。通过从大到小挑选砝码并使用前缀和优化,避免无效搜索,从而求得天平最大承重量下的最大称量数。文章提供了问题的背景、思路解析及代码实现,采用快读技术提高效率。
摘要由CSDN通过智能技术生成

传送门

题目大意:

有一串不递减序列的序列砝码(从第三个开始,每个砝码质量最少是前两个砝码的和),要求用天平秤重,给出天平的最大承重量,砝码数量和砝码的重量,求最大的称量数。

思路:求最大称量数就相当于求多少个数拼成一个最大的数,那就可以用到从大到小的挑选(优化一),如果大的这个可以。前面一定有砝码可以凑成这个大的数,而我们直接选这个大的数的话,就不用再搜索了,然后对于从后往前面选的话,可以再进行一次优化,如果已经选择的砝码的质量加上再选择第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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值