1、题目链接
:Problem - 519C - Codeforces
题型:规划问题
题意:给定高手n个和低能m个,队伍组合只能是2个高1个低,1个高2个低。求给定n和m的最大队伍数量。
题解:这道题把数学方程列出来看起来像是规划问题,先设第一种组合是x支队伍,第二种是y支队伍。
n - (2 * x + y) = x1;
m - (2 * y + x) = x2;
对于x1, x2只会有以下的可能:
x1 = k(k >= 0 && k <= n), x2 = 0;
x2 = k(k >= 0 && k <= m), x1 = 0;
x1 = 1, x2 = 1;
2 * x + y = n - x1
2 * y + x = m - x2
设n - x1 = k1,m - x2 = k2;
得到通解:x - (2 * k1 - k2) / 3, y = (2 * k2 - k1) / 3;
CODE:
ll FW(ll x1, ll x2)
{
ll x = n - x1, y = m - x2;
ll xx = x * 2 - y, yy = y * 2 - x;
if(xx % 3 || yy % 3 || xx < 0 || yy < 0) return 0;
return xx / 3 + yy / 3;
}
void fw()
{
cin >> n >> m;
// 2 1 1 2
ll ans = 0;
ans = max(ans, FW(1, 1));
for(ll i = 0; i <= n; i ++ )
ans = max(ans, FW(i, 0));
for(ll i = 0; i <= m; i ++ )
ans = max(ans, FW(0, i));
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int _ = 1;
while(_--) fw();
return 0;
}