求助大佬!求算时间复杂度,真的搞不懂:(
  • 板块灌水区
  • 楼主Karis
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/11/12 19:12
  • 上次更新2023/11/4 00:47:51
查看原帖
求助大佬!求算时间复杂度,真的搞不懂:(
478755
Karis楼主2021/11/12 19:12

P5194(一道黄题)

#include<bits/stdc++.h>
#define ll long long 

using namespace std;

ll n, c, a[1010], maxx, v[1010], flag = 0;

void init()
{
	cin >> n >> c;
	for(int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		if(a[i] == c)
		{
			cout << c << endl;
			flag = 1;
		}
		if(a[i] > c)
			v[i] = 1;
	}
}

int binary_search(ll x, ll tmp)
{
	ll l = 1, r = x;
	while(l < r)
	{
		int mid = l + r + 1>> 1;
		if(a[mid] > tmp)
			r = mid-1;
		else
			l = mid;
	}
	return l;
}

void dfs(ll ans, ll x)
{
	if(ans > c)
		return;
	else
		maxx = max(maxx, ans);
	int d = x;
	if(!v[x])
		d = binary_search(x, c-ans);
	for(int i = d; i >= 1; --i)
	{
		if(!v[i])
		{
			v[i] = 1;
			dfs(ans+a[i], i);
			v[i] = 0;
		}
	}
	return;
}

int main()
{
	init();
	if(flag)
		return 0;
	dfs(0, n);
	cout << maxx << endl;
	return 0;
}

2021/11/12 19:12
加载中...