问题描述:
你有一架天平和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)
{

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

被折叠的 条评论
为什么被折叠?



