10分求调
查看原帖
10分求调
1259871
jkZJM110211楼主2025/7/21 09:02
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
vector<int> p;
bool f = false;
void g(int n) {
	a.resize(n);
	if (n == 1) {
		a[0] = 1;
		return ;
	}
	vector<vector<int>> p(n, vector<int>(n, 0));
	p[0][0] = 1;
	for (int i = 1; i < n; ++i) {
		p[i][0] = 1;
		for (int j = 1; j <= i; ++j) {
			p[i][j] = p[i - 1][j - 1] + p[i - 1][j];
		}
	}
	for (int i = 0; i < n; ++i) {
		a[i] = p[n - 1][i];
	}
}
void bk(int id, int cnt, int n, int sum) {
	if (f) return;
	if (id == n) {
		if (cnt == sum) {
			f = true;
			for (int i = 0; i < n; ++i) {
				if (i > 0) cout << " ";
				cout << p[i];
			}
			cout << endl;
		}
		return;
	}
	for (int num = 1; num <= 100 && !f; ++num) {
		int new_sum = cnt + num * a[id];
		if (new_sum > sum) continue;
		p.push_back(num);
		bk(id + 1, new_sum, n, sum);
		p.pop_back();
	}
}
int main() {
	int n, sum;
	cin >> n >> sum;
	g(n);
	bk(0, 0, n, sum);
	return 0;
}
2025/7/21 09:02
加载中...