Fancy Mouse
- -|||
枚举搜索。当然用动态规划是最好的了。
我的搜索办法是,先将所有石子放在一起,然后满堆和空堆的差就是石子总质量。接下来就一种状态一种状态搜索,每次搜索到把一个石子从原来那个堆移动到另一个堆以后,满堆和空堆的差就减去这个石子重量的2倍。搜索完毕,取最小的那个差值即可。
#include<iostream>
using namespace std;

const int MAX = 20;
void Stone(int current,int index);
int t;
long Stones[MAX],MinDiff;
int main()
{
    
int c1,sum;
    
while(cin>>t)
    
{
        sum
=0;
        
for(c1=0;c1<t;c1++)
        
{
            cin
>>Stones[c1];
            sum
+=Stones[c1];
        }

        MinDiff
=sum;
        Stone(sum,
0);
        cout
<<MinDiff<<endl;
    }

    
return 0;
}

void Stone(int current,int index)
{
    
if(current<MinDiff) MinDiff=current;
    
if(t==index) return;
    Stone(current,index
+1);
    
if(current-2*Stones[index] >= 0) Stone(current-2*Stones[index],index+1);
}
posted on 2005-08-27 13:19  Fancy Mouse  阅读(538)  评论(1编辑  收藏  举报