沐里纷纷


私信TA

用户名:Epoch

访问量:63207

签 名:

我不会算法

等  级
排  名 37
经  验 12852
参赛次数 1
文章发表 172
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

不会算法

解题思路:

可以用DFS

注意事项:

1.还好数据量小,数据量大可能还是要DP做

2.天平两边都可以放砝码,和物体放在同侧相当于减

3.不能用判断当前质量是否小于零,或者当前选择砝码的质量大于物体质量来剪枝


参考代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdio.h>
#include <cctype>

#define N 24

using namespace std;

int weight[N + 2];
int obj[N + 2];
bool able[N + 2];

void DFS(int cur, int curWeight, const int tgtWeight, const int n, const int objNo)
{
	if (cur > n)
		return;
	else if (curWeight == tgtWeight)
	{
		able[objNo] = true;
		return;
	}
	else
	{
		//砝码和物品分开放
		DFS(cur + 1, curWeight + weight[cur], tgtWeight, n, objNo);
		//不放
		DFS(cur + 1, curWeight, tgtWeight, n, objNo);
		//砝码和物品放一起
		DFS(cur + 1, curWeight - weight[cur], tgtWeight, n, objNo);
	}
}

int main(int argc, char** argv)
{
	int n = 0, m = 0;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> weight[i];
	for (int i = 0; i < m; i++)
		cin >> obj[i];
	for (int i = 0; i < m; i++)
		DFS(0, 0, obj[i], n, i);
	for (int i = 0; i < m; i++)
	{
		if (able[i] == true)
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}
	return 0;
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区