题目很短:
小科手上有n张钞票,每张钞票的面额分别是Mi,请你从小到大的顺序输出所有可能组成的金额
输入格式
第一行,一个正整数n
第二行包含由空格隔开的n个正整数,依次表示每张钞票的面额Mi
输出格式
若干行,从小到大的输出所有可能组合出的金额,每个金额数字占一行
样例数据:
输入:
6
1 1 1 1 5 10
输出:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
17
18
19
代码:
#include<bits/stdc++.h>
using namespace std;
int a[10001];
int n;
int can(int x){
int s=n;
int fx=0;
while(s<=n){
if(a[s]>x){
++s;
}
else {
x-=a[s];
--s;
}
if(x==0) return 1;
}
return 0;
}
int main(){
int sum=0;
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
sum+=a[i];
}
sort(a+1,a+n+1,greater<int>());
cout<<0<<endl;
for(int i=1;i<=sum;++i){
if(can(i)){
cout<<i<<endl;
}
}
}