CF 626C [Block Towers] 贪心

题目链接: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);
}

  

posted @ 2017-04-16 19:23  哇咔咔咔  阅读(246)  评论(0编辑  收藏  举报