牛客练习赛34 D. little w and Exchange(思维)

2019-01-10 15:51:20 浏览数 (1)

题目链接:https://ac.nowcoder.com/acm/contest/297/D

       先把所有数字按从小到大排序,然后第一个数字必须是 1,如果不是 1 的话首先 1 就 凑不出来。然后下一个面值可以是 1 也可以是 2,但是不可能为 3,因为如果是 3 或者 比 3 还大的话,那么 2 就凑不出来了。所以得到一个递推的规律: 将数字从小到大排序后,如果下一张纸币的面值<=sum 1(sum 为当前纸币的面值 和)。那么这张纸币就能放进来更新 sum,否则就会断掉导致 sum 1 无法被构造出来。 最后再判断一下 sum 是否大于等于 m 就可以了。                                                         

                                                                                                                                                                               ---------官方题解


AC代码:

代码语言:javascript复制
#include <bits/stdc  .h>
#define maxn 1005
#define ll long long
using namespace std;
int n,pre[maxn];
ll m;

int main()
{
	scanf("%d%lld",&n,&m);
	for(int i=0;i<n;i  ){
		scanf("%d",&pre[i]);
	}
	sort(pre, pre   n);
	ll sum = 0;
	for(int i=0;i<n;i  ){
		if(pre[i] <= sum   1)sum  = pre[i];
		else break;
	}
	if(sum >= m)puts("YES");
	else puts("NO");
	return 0;
}

0 人点赞