POJ 2817 木棒 解题报告

POJ 2817 木棒 解题报告

编号:2817

 

考查点:递归

 

思路:一开始很天真的以为找到最小的可以被总长除尽的数即可,后来才发现原来除尽了的数还要判断是否符合题意,这个判断才是关键,也就是这个判断,即组合木棒的过程用到了递归。

 

提交情况: 啥玩意只要先看了书,自己动脑袋肯定能明白,难就难在不看书自己想通.我是看了书才AC.

 

Source Code

 //POJ Grids 2817

#include  < iostream >
using   namespace  std;

int  count;
int  stick[ 65 ];
bool  flag[ 65 ];

bool  istick( int  left, int  len, int  n)
{
    
if  (left == 0 && n == 0 )
        
return   true ;
    
if  (left == 0 )
        left 
=  len;
    
for  ( int  i = 0 ;i < count;i ++ )
    {
        
if  ( ! flag[i])
        {
            
if  (left >= stick[i])
            {
                flag[i] 
=   true ;
                
if  (istick(left - stick[i],len,n - 1 ))
                    
return   true ;
                flag[i] 
=   false ;
                
if  (stick[i] == left || left == len)
                    
break ;
            }
        }
    }
    
return   false ;
}

int  compare( const   void *  e1, const   void *  e2)
{
    
return   * (( int * )e2)  -   * (( int * )e1);
}

int  main()
{
    
while  (cin >> count && count != 0 )
    {
        memset(stick,
0 , sizeof  stick);
        memset(flag,
false , sizeof  flag);
        
int  sum  =   0 ;
        
int  max  =   0 ;
        
for  ( int  i = 0 ;i < count;i ++ )
        {
            cin
>> stick[i];
            
if  (stick[i] > max)
                max 
=  stick[i];
            sum 
+=  stick[i];
        }
        qsort(stick,count,
sizeof ( int ),compare);
        
for  ( int  i = max;i <= sum;i ++ )
        {
            
if  (sum % i == 0 )
            {
                
if  (istick( 0 ,i,count))
                {
                    cout
<< i << endl;
                    
break ;
                }
            }
        }
    }

    
return   0 ;
}

总结:这道题是递归这章的最后一题,以前感觉递归很巧很简单,现在才发现这玩意这么强悍,搜索好帮手.

另 今天为了上netifera装了IRC,为装IRC装了Firefox,为装Firefox装了一些字体,导致现在的字体和以前的有所不同了.

 

 

                                                       By   Ns517

                                                      Time 09.02.06

转载于:https://www.cnblogs.com/ns517/archive/2009/02/06/1385542.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值