https://codeforces.com/contest/2067/problem/B
#include<bits/stdc++.h>
using namespace std;
int t,n;
int x,a[1005],sta[1005],stb[1005];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin>>t;
while(t--){
cin>>n;
for(int i=1 ;i<=n;i++){
cin>>a[i];
sta[a[i]]++;
}
for(int i=1;i<=n;i++){
if(sta[i]>=2){
sta[i]--;
stb[i]++;
}
if(sta[i]){
sta[i+1]=sta[i+1]+sta[i]-1;
sta[i]=1;
}1
}
for(int i =1;i<=n;i++){
if((sta[i]+stb[i])%2!=0) x=1;
}
if(x==1)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
memset(a,0,sizeof(a));
memset(sta,0,sizeof(sta));
memset(stb,0,sizeof(stb));2
x=0;
}
return 0;
}
本题主要采用贪心算法,先sta记录每个有价值的物品个数,排序后从最小价值开始操作
先向第二背包转移物品,保证该价值符合条件后向高价值转化,直到剩余物品不够转化(该法由于数据范围较小可以通过),最后判断每个价值下两个背包中的物品是否均分即可(可以优化,因为从最小价值开始操作,即只需记录并判断最后一个价值存在的物品即可,由于本题数据较小便不在优化3)
大石
大分
大变
草拟吗铝热剂