HDU1455 Sticks(深搜+剪枝)

这里写图片描述
这里写图片描述

题意:有一堆的木棒,长度不一,它们是有一些整齐的木棒截断而成的,求最小的木棒原始长度。
思路很简单深搜,但是直接深搜的话会tle,首先可以对木棒长度进行排序从大到小,优先使用长度长的木棒,加入当前长度不符合,考虑下一个木棒
其次如果长度为零的时候选择木棒失败,那么直接退出,实测加上这一剪枝就可以ac,这一剪枝可以帮助我们尽可能的在靠近树根处剪枝,所以优化效果很明显。
然后是如果这次选择的木棒长度和上次失败时的一样,那么剪枝。

2019年2月24日

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 10010
typedef long long ll;
using namespace std;
int n,ans,tmp,q,target;
int a[maxn],vis[maxn];
bool cmp(int x,int y){
   
    return x>y;
}

//cnt比配的根数,len此时的长度,pos当前匹配的位置
bool dfs(int cnt,int len,int pos){
   
    if(cnt==target) return true;
    if(len==tmp) return dfs(cnt+1,0,0);
    for(int i=pos;i<n;i++){
   
        if(!vis[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值