频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
poj1011 Sticks---dfs
2013-12-09 15:35:36         来源:tiancaihaha  
收藏   我要投稿

剪枝啊剪枝


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int vis[70],n,a[70],tmp;

bool cmp(int x,int y)
{
    return x>y;
}

int dfs(int m,int dur)
{
    int i;
    if(m==0&&dur==0) return 1;
    if(dur==0) dur=tmp;
    for(i=0;i=0)
            {
                vis[i]=1;
                if(dfs(m-1,dur-a[i]))
                    return 1;
                vis[i]=0;
                if(a[i]==dur||dur==tmp) return 0;
                //剩余部分dur=a[i]或一节的长度tmp时,上面dfs都没有返回1 说明后面无解
                while(a[i+1]==a[i]) i++;
                //这个就显然啦
            }
        }
    }
    return 0;
}

int main()
{
    int i,s;
    while(scanf("%d",&n)&&n)
    {
        for(i=0,s=0;i

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:poj2918 Tudoku---dfs
下一篇:C++ 之 strlen()和sizeof()比较
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站