LeeBlog

导航

HDU 3573 Buy Sticks 贪心

这题要小小的用到一点贪心的思想,哪里呢???????

就是使每一根棍子在组合起来后剩余的最短,这样总的剩余也就最短,这样找出来的解便是最小解咯!

小小算一下,便可知,剩余最小的分别是30 20 20 ,28 20 20 ,20 20 20,剩下来的都是两两搭配的,其实细想不用考虑哪两个搭配后剩余最小,因为就算再小也不能使三个组合起来了,最后剩下的就只能多用一条了

#include<stdio.h> 
int min( int a,int b )
{
    return a < b ? a : b; 
    } 
int main( )
{
    int x,y,z,t,sum,n;
    scanf( "%d",&n );
    for( int i = 1; i <= n; ++i )
    {
         sum = 0; 
         scanf( "%d%d%d",&x,&y,&z );
         t = min( x / 2,z );//30 20 20 
         x -= 2 * t,z -= t,sum += t;
         t = min( x / 2,y );//28 20 20 
         x -= 2 * t,y -= t, sum += t;
         t = x / 3, x %= 3,sum += t;//20 20 20 
         sum += ( x + y + z + 1 ) / 2;// 
         printf( "Case %d: %d\n",i,sum ); 
         } 
    return 0; 
} 

posted on 2011-04-11 22:39  LeeBlog  阅读(201)  评论(0)    收藏  举报