题意:有两个数,把其中一个数分成两个数,这两个数的和等于原来的数(例如把5分成2和3),求这三个数相加或相减能得到多少个数。
题记:把所有情况都枚举出来即可。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int N=210;
int nums[N];
int solve(int a,int b,int c){
int ans=0;
memset(nums,0,sizeof(nums));
nums[a]=1;
nums[b]=1;
nums[c]=1;
nums[a+b]=1;
nums[a+c]=1;
nums[b+c]=1;
nums[a+b+c]=1;
nums[abs(a-b)]=1;
nums[abs(a-c)]=1;
nums[abs(b-c)]=1;
nums[abs(a-b-c)]=1;
nums[abs(b-a-c)]=1;
nums[abs(c-a-b)]=1;
for(int i=1;i<=200;i++) ans+=nums[i];
return ans;
}
int main(){
int t;
cin>>t;
while(t--){
int x,y;
cin>>x>>y;
int ans=0;
for(int i=1;i<=x/2;i++){
ans=max(solve(i,x-i,y),ans);
}
for(int i=1;i<=y/2;i++){
ans=max(solve(i,x,y-i),ans);
}
cout<<ans<<endl;
}
return 0;
}