一个问题
  • 板块学术版
  • 楼主xuyiyang
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/4 12:50
  • 上次更新2024/4/4 16:42:25
查看原帖
一个问题
366516
xuyiyang楼主2024/4/4 12:50
const int N = 210;

int n, a[N], p[N], c[3], st[N][N][N];

void dfs(int i, int maxv, int minv) 
{
	if (maxv >= 2 * minv) return ;
	if (i == n + 1) return st[c[0]][c[1]][c[2]] = 1, void();
	c[a[i]] ++ ; dfs(i + 1, max(maxv, p[i]), min(minv, p[i]));
	c[a[i]] -- ; dfs(i + 1, maxv, minv);
}

int main() 
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++ ) scanf("%d%d", &a[i], &p[i]);
	dfs(1, 0, 1e9); int res = 0;
	for (int i = 0; i <= n; i ++ ) for (int j = 0; j <= n; j ++ ) for (int k = 0; k <= n; k ++ ) if (st[i][j][k]) res ++ ;
	printf("%d\n", res); return 0;
}
const int N = 210;
typedef long long LL;
typedef pair<int, pair<int, int> > PIII;

int n;
struct Nd { int x, y; bool operator < (const Nd& t) const { return y < t.y; } } a[N];
int c[N][3]; LL res;
PIII s[N]; int cnt;
int S[N][N][N];

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++ ) scanf("%d%d", &a[i].x, &a[i].y); sort(a + 1, a + 1 + n);
	for (int i = 1; i <= n; i ++ ) 
	{
		for (int j = 0; j < 3; j ++ ) c[i][j] = c[i - 1][j];
		c[i][a[i].x] ++ ;
	}
	for (int i = 1; i <= n; i ++ )
	{
		int l = i, r = n;
		while (l < r)
		{
			int mid = l + r + 1 >> 1;
			if (a[mid].y < a[i].y * 2) l = mid;
			else r = mid - 1;
		} // 选 i  
		if (a[l].y < a[i].y * 2) 
			s[ ++ cnt] = make_pair(c[l][0] - c[i - 1][0], make_pair(c[l][1] - c[i - 1][1], c[l][2] - c[i - 1][2]));
	}
	sort(s + 1, s + 1 + cnt);
//	for (int i = 1; i <= cnt; i ++ ) cout << s[i].first << ' ' << s[i].second.first << ' ' << s[i].second.second << '\n';
	for (int i = 1; i <= cnt; i ++ ) for (int j = 0; j <= s[i].first; j ++ ) 
		for (int k = 0; k <= s[i].second.first; k ++ ) for (int p = 0; p <= s[i].second.second; p ++ )
			S[j][k][p] = 1;
	for (int i = 0; i <= n; i ++ ) for (int j = 0; j <= n; j ++ ) for (int k = 0; k <= n; k ++ )
		if (S[i][j][k]) res ++ ;
	printf("%lld\n", res);
	
	return 0;
}

这两段代码看起来都将所有可行解遍历了一遍,但是好像前一段是指数级的,后一段是多项式的,搞不懂为什么会有复杂度差异?

2024/4/4 12:50
加载中...