砝码称重(枚举and动态规划)

本文介绍了使用枚举和动态规划解决砝码称重问题的方法。枚举法通过尝试所有砝码的三种状态,计算出所有可能的重量组合,但效率较低。动态规划法通过两次0-1背包问题,分别处理砝码放右侧和左侧的情况,提高了计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

你有一架天平和N个砝码,N个砝码的重量分别是w1、w2、w3......wn。请你计算一共可以秤出多少种不同的重量?注意砝码可以放在天平的两边。

 问题分析:首先砝码可以有三种状态,一个是放右边加重量,或者不放,再者就是放左边减重量,所以我们可以用枚举把每一个砝码的三种情况都枚举一遍,它的算法复杂度是3的N次方,当N越来越大时,3的N次方呈现指数爆炸式增长,极有可能会超时,但本题所给的样例不会超时,下面给出代码:

#include <iostream>
#include <iomanip>
typedef long long ll;                      /位数可能很长,所以用长整型
using namespace std;
const int maxn = 1e5 + 50;
int vis[maxn];
int a[maxn];
int N;
void dfs(int sum, int i)                      /三种状态函数
{
    if (i == N)
    {
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值