首页 > 其他 > 详细

usaco Milk Measuring

时间:2015-10-06 16:46:16      阅读:235      评论:0      收藏:0      [点我收藏+]

迭代加深搜索。

一开始写了个完全背包,但只能过几个测试点,发现它有些情况不能很好的判断。

好在迭代加深并不难写。

/*
ID: modengd1
PROG: milk4
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <algorithm>
#include <vector>
using namespace std;

int input[100];
int Q,P;
int ans[100];
int dp[20001];
bool DFS(int deep,int index,int limit)//deep是当前层深也是就是该取第几个数了,index是前一个数在input数组中的下标。limit是本次搜索要找的集合的大小
{
    if(deep==limit)
    {
        memset(dp,false,sizeof(dp));
        dp[0]=true;
        for(int i=0;i<limit;i++)
        {
            for(int j=ans[i];j<=Q;j++)
            {
                dp[j]|=dp[j-ans[i]];
            }
        }
        if(dp[Q])
        {
            cout<<limit;
            for(int i=0;i<limit;i++)
                cout<<‘ ‘<<ans[i];
            cout<<endl;
            return true;
        }
        else
            return false;
    }
    for(int i=index+1;i<=P-(limit-deep-1);i++)
    {
        ans[deep]=input[i];
        if(DFS(deep+1,i,limit))
            return true;
    }
    return false;
}
int main()
{
    freopen("milk4.in","r",stdin);
    freopen("milk4.out","w",stdout);
    scanf("%d",&Q);
    scanf("%d",&P);
    for(int i=0;i<P;i++)
    {
        scanf("%d",&input[i]);
    }
    sort(input,input+P);
    for(int i=1;i<=P;i++)
    {
        if(DFS(0,-1,i))
            break;
    }
    return 0 ;
}

  

usaco Milk Measuring

原文:http://www.cnblogs.com/modengdubai/p/4857288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!