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