失落

解题思路

这题就是一道数论题目
我们先拿题目样例来模拟一遍

3
5 1 2
首先排序
1 2 5
然后
	for(long long i=1;i<=n;i++)
     if(a[i]<=answer+1)answer+=a[i];
通过这个程序
我们将12累加进answer里面
但当5要进入时却不行
所以,退出循环
最后输出answer+1     

看到这里
想必有同学不知道这样做的原理
answer+a[i],就是把可以凑出来的数范围加大
那么a[i],就是可以凑出来的数
这么一来,不就简单易懂
还有不会的可以再模拟一些大数据

输入
15
1 2 4 8 16 21 32 64 9 3 5 128 24 54 256
输出
628
输入
10
1 1 1  2 3 1 5 2 3 1 2
输出
21

看到这里,是不是又懂了点
剩下的可以自己继续摸索

这里提醒一点
a[i]的值可能有重复(用其他方法的同学注意了)

AC代码

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
long long n,answer,a[100005];
int main()
{
   
	scanf("%lld",&n);//输入
	for(long long i=1;i<=n;i++)
	 scanf("%lld",&a[i]);
	sort(a+1,a+n+1); //快排
	for(long long i=1;i<=n;i++)//数论主程序
     if(a[i]<=answer+1)answer+=a[i];
	printf("%lld",answer+1);//输出
	return 0;
}

谢谢