Codeforces Round 859 (Div. 4)(G)
创始人
2025-05-31 02:34:13

G. Subsequence Addition
标签
规律、数学
链接
传送门、
结论
当前前缀和小于这个数就是NO,其他是YES(1处特殊)
证明
n=1时,sum1=1,均可以到达n=1时,sum_1=1,均可以到达n=1时,sum1​=1,均可以到达
假设n=k时,sumk中所有的数均可以到达假设n=k时,sum_k中所有的数均可以到达假设n=k时,sumk​中所有的数均可以到达
那么n=k+1时,sumk+1=sumk+ak+1那么n=k+1时,sum_{k+1}=sum_k+a_{k+1}那么n=k+1时,sumk+1​=sumk​+ak+1​
其中小于等于sumk部分均有子集和存在,又因为ak+1⩽sumk其中小于等于sum_k部分均有子集和存在,又因为a_{k+1}\leqslant sum_k其中小于等于sumk​部分均有子集和存在,又因为ak+1​⩽sumk​
而且,sumk+1是全集,必然存在而且,sum_{k+1}是全集,必然存在而且,sumk+1​是全集,必然存在
对于sumk+1,sumk+2...,sumk+ak+1对于sum_{k}+1,sum_k+2...,sum_k+a_{k+1}对于sumk​+1,sumk​+2...,sumk​+ak+1​
只需sumk+1,减去ak+1−x⩽sumk(0⩽x 即全集中取出这些子集,必然存在,即全集中取出这些子集,必然存在,即全集中取出这些子集,必然存在,
得证k+1的时候,小于等于sumk+1的部分均有子集存在得证k+1的时候,小于等于sum_{k+1}的部分均有子集存在得证k+1的时候,小于等于sumk+1​的部分均有子集存在
结论成立结论成立结论成立
实现

#include 
#define ll long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f 
#define ls (id << 1)
#define rs (id << 1 | 1)
using namespace std;
typedef pair pii;
const int N = 2e5 + 5;
int a[N];
void solve() {int n;cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];sort(a + 1, a + 1 + n);if (a[1] != 1) {cout << "NO\n";return;} ll sum = 1;for (int i = 2; i <= n; i++) {if (a[i] > sum) {cout << "NO\n";return;}sum += a[i];}cout << "YES\n";
}
int main() {ios::sync_with_stdio(false);cin.tie(0);int T = 1;cin >> T; while (T--) {solve();}return 0;
}

相关内容

热门资讯

吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
重庆属于哪个省份的 重庆在中国... 重庆有多大,大到超出我们的想象,重庆作为我国4个直辖市之一,印象里应该跟京津沪面积差不多,可事实上却...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...