题解:B4290 [蓝桥杯青少年组省赛 2022] 组合
题目传送门
题意
给定
思路
做题先看标签:动态规划+数论。在脑子里面规划一下,输出
至于
接下来是输出正常答案了。我们先设定状态,f.push_back(1)。更具体的实现方法见代码。
代码
#include <bits/stdc++.h>
using namespace std;
int n, g, cnt, ans, a[30];
vector<bool> f;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]), g = __gcd(g, a[i]);
if (g != 1)
{
printf("-1");
return 0;
}
sort(a + 1, a + n + 1), f.push_back(1);
for (int i = 1; cnt < a[1]; i++)
{
bool flag = 0;
for (int j = 1; j <= n && a[j] <= i; j++)
if (f[i - a[j]])
{
flag = 1;
break;
}
f.push_back(flag);
if (flag)
cnt++;
else
cnt = 0, ans++;
}
printf("%d", ans);
return 0;
}
题解来之不易,且看且珍惜。给个赞再走吧。
题目传送门