题解 | #神奇的口袋#

神奇的口袋

https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35

#include<iostream>
#include<string>
#include<map>
using namespace std;


int item[25];
int res; //用于表示方式的个数
bool isused[25];
int n; 

void DFS(int curwei, int position) {  //curwei表示当前已有重量
	for (int i = position; i < n; i++) { //遍历其所有邻居
		if (curwei + item[i] > 40 || isused[i] == true) {
			continue;
		}
		isused[i] = true; //表示拿起木棍
		if (curwei + item[i] < 40) {
			DFS(curwei + item[i], i + 1); //继续递归
		}
		else if (curwei + item[i] == 40) {
			res++;
		}
		isused[i] = false;
	}
}

int main() {
	cin >> n;
	for(int i=0;i<n;i++)
	{
		cin >> item[i];
		isused[i] = false;
	}
	DFS(0, 0);
	cout << res;


}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务