Description
Input
Output
Sample Input
4
1 3 6 6
Sample Output
3
1 2 3
Data Constraint
做法:居然暴力就可以过233333
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#define rep(i, a, b) for (int i = a; i <= b; i++)
using namespace std;
int n, a[30], b[30], tm;
bool bobo;
bool judge(int x, int mdep, int dep, int sum)
{
if (x == sum) return 1;
if (x < sum) return 0;
if (dep > mdep) return 0;
if (judge(x, mdep, dep + 1, sum + b[dep])) return 1;
return judge(x, mdep, dep + 1, sum);
}
void print(int x)
{
bobo = 1;
printf("%d\n", x);
rep(i, 1, x)
printf("%d ", b[i]);
return;
}
void dfs(int dep, int last, int mdep)
{
if (bobo) return;
if (dep > mdep)
{
rep(i, 1, n)
if (a[i] != a[i - 1] && !judge(a[i], mdep, 1, 0)) return;
print(mdep);
return;
}
rep(i, last, tm)
{
b[dep] = i;
dfs(dep + 1, i, mdep);
b[dep] = 0;
}
}
int main()
{
freopen("driver.in", "r", stdin);
freopen("driver.out", "w", stdout);
scanf("%d", &n);
rep(i, 1, n)
{
scanf("%d", &a[i]);
tm = max(tm, a[i]);
}
rep(i, 1, n) if(!bobo) dfs(1, 1, i);
}