思路:a中包含的元素:只参加a的,只参加a且b的,只参加a且c的,只参加a且b且c的;
b中包含的元素:只参加b的,只参加a且b的,只参加b且c的,只参加a且b且c的;
c中包含的元素:只参加c的,只参加b且c的,只参加a且c的,只参加a且b且c的;
ab中包含的元素:只参加a且b的,只参加a且b且c的;
ac中包含的元素:只参加a且c的,只参加a且b且c的;
bc中包含的元素:只参加b且c的,只参加a且b且c的;
abc中包含的元素:只参加a且b且c的;
只要从abc开始依次往上减就可以了。
代码:
#include<bits/stdc++.h> using namespace std; #define mem(a,b) memset((a),(b),sizeof(b)) int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin>>t; while(t--) { int n; cin>>n; int ans=0; while(n--) { int a,b,c,ab,bc,ac,abc; cin>>a>>b>>c>>ab>>bc>>ac>>abc; a-=abc,b-=abc,c-=abc,ab-=abc,bc-=abc,ac-=abc; a-=ab,a-=ac; b-=ab,b-=bc; c-=bc,c-=ac; if(a>=0&&b>=0&&c>=0&&ab>=0&&bc>=0&&ac>=0&&abc>=0) { ans=max(ans,a+b+c+ab+bc+ac+abc); } } cout<<ans<<endl; } return 0; }