题目大意:
解法一:
首先想到的是可以用广度优先搜索的方式来进行暴力求解,通过使用递归来将每一种方法遍历,并且标记,不过由于此方法的时间复杂度是O(n3),故使用暴力搜索只能完成50%的评测用例,只能得一半的分。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6;
int vis[maxn];//记录每种称重是否出现过
int a[maxn];//N个砝码的重量
int N;//砝码的数量
void dfs(int sum, int i)//sum:当前已选用砝码的总重量 i:下一个将要选用砝码的序号
{
if (i == N)
{
if (sum >= 0)
vis[sum] = 1;
return;
}
dfs(sum + a[i], i +