AC代码:
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=110;
int a[N],b[N];
int n;
void solve() {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=1;
for(int i=1;i<=n;i++){
while(cnt==a[i]||cnt==b[i-1]) cnt++;
b[i]=cnt;
}
cout<<b[n]<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
首先,能确定的是至少删除一个元素,那么枚举每一个元素,使得该元素不出现,那些含有该元素的集合都不选,其它集合元素并起来,每次取max
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int N=55;
bool vis[N];//vis[i]=0表示集合i保留,vis[i]=1表示集合i删除
int n;
set<int>q;//存放删除某些集合后剩下的并
int ans;
void solve() {
cin>>n;
vector<vector<int>>e(N);
vector<vector<int>>g(N);
set<int>se;//存放所有集合的并(自动去重)
for(int i=1; i<=n; i++) {
int k;
cin>>k;
for(int j=1; j<=k; j++) {
int x;
cin>>x;
se.insert(x);
e[i].push_back(x);//集合i中存放哪些数
g[x].push_back(i);//数s[i][j]存在于哪些集合中
}
}
ans=0;
//枚举每一个数,求当它不出现时集合并的个数是多少
for(auto v:se) {
for(int i=1;i<=N;i++) vis[i]=false;
q.clear();
for(auto u:g[v]) {
vis[u]=true;
}
for(int i=1; i<=n; i++) {
if(vis[i]) continue;
for(auto x:e[i]) q.insert(x);
}
ans=max(ans,(int)q.size());
}
cout<<ans<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
首先删除一个数必然会改变后面的位置的奇偶性,那么就想从后往前进行操作
当我们遇到正数时,肯定是想要的,遇到负数就不要
如下图,9要,8不要,7要,然后6想要,但是由于6是偶数,只能直接删掉,因为5也想要,所以先要5,然后刚才的6就变成5了,那么刚才的6也能要了,然后4不要,3要,2不要,1要
从这个过程我们可以发现,如果对奇数位置的数操作,我们可以得到它连同它后面所有的正数,如果对偶数位置的数操作,我们可以得到它后面所有的正数
所以我们可以选择对位置1进行操作得到它加上它后面所有的正数,或者对位置2进行操作,得到从3开始的所有的正数
AC代码:
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
int a[N];
int n;
void solve() {
cin>>n;
int sum=0;
int ans=0;
memset(a,0,sizeof a);
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=3;i<=n;i++) {
if(a[i]>0) sum+=a[i];
}
ans=sum+a[1];
if(a[2]>0) ans+=a[2];
ans=max(ans,sum);
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}