Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
145940 | 李承瀚 | 邮票面值问题 | C++ | 通过 | 100 | 89 MS | 256 KB | 876 | 2024-05-06 13:10:54 |
#include<iostream> #include<algorithm> #include<vector> #define INF 0x3fffffff using namespace std; int n, k; int sum = -1; int v[40] = { 0 }; int a[40] = { 0 }; int dp[500] = { 0 }; void check() { int i = 1; dp[0] = 0; while (1) { dp[i] = INF; int j = 0; for (; j < k && i >= v[j]; j++) { dp[i] = dp[i] < dp[i - v[j]] + 1 ? dp[i] : dp[i - v[j]] + 1; } if (dp[i] > n) { break; } i++; } if (i - 1 > sum) { sum = i - 1; for (int i = 0; i < k; i++) { a[i] = v[i]; } } } void dfs(int cnt) { if (cnt == k - 1) { check(); return; } for (int i = v[cnt] + 1; i <= v[cnt] * n + 1; i++) { v[cnt + 1] = i; dfs(cnt + 1); } } int main() { cin >> n >> k; v[0] = 1; dfs(0); for (int i = 0; i < k; i++) { printf("%d%c", a[i], i == k - 1 ? '\n' : ' '); } cout << sum << endl; return 0; }