题目链接:http://codeforces.com/problemset/problem/626/C
题目大意: 有n个人用高度为2的砖往上搭,有m个人用高度为3的砖往上搭。每个人可用的砖块数是无限的,但是要求每个人搭的塔的高度,求所有可行情况中塔的最高高度的最小值。
关键思想:贪心,当且仅当高度为6的倍数时,他们的高度会相同。这时必须有一个人搭更高的,哪个人呢?此时就贪心;另外一种思想是数学的,首先答案x一定是大于等于2n也是大于等于3m的(有6的倍数取等号)对吧,而且m+n<=(x/2+x/3-x/6)【仔细想象是不是这样】。通过这个不等式求出符合要求的x的最小值。
代码如下:
//贪心
#include <iostream>
using namespace std;int main(){long long n,m;while(cin>>n>>m){long long d1=2*n,d2=3*m;for(long long i=6;i<=min(d1,d2);i+=6){//i是6的倍数,它比终点小说明还有重复的情况。if(d1<=d2){d1+=2;}else{d2+=3;}//贪心}cout<<max(d1,d2)<<endl;}return 0;
}
#include <cstdio>int main()
{int i, a, b;scanf("%d%d", &a, &b);for (i = 0;; i++) if (i / 2 >= a && i / 3 >= b && i / 2 + i / 3 - i / 6 >= a + b) break;printf("%d", i);
}