萌新刚学OI 求助水题
  • 板块学术版
  • 楼主封禁用户
  • 当前回复45
  • 已保存回复45
  • 发布时间2020/8/22 11:26
  • 上次更新2023/11/6 19:41:19
查看原帖
萌新刚学OI 求助水题
133151
封禁用户楼主2020/8/22 11:26

题目很短:

小科手上有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;
		}
	}
}
2020/8/22 11:26
加载中...