国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

UVA 307Sticks(dfs搜索)

2019-11-08 02:08:23
字體:
供稿:網(wǎng)友

大體題意:

給你n個木棍,要求分配這個n 個木棍到x組,使得x組的木棍長度和都相同,問最小的長度和是多少?

思路:

直接搜索:

需要加很多剪枝才能過:

1.首先你枚舉時,應(yīng)該枚舉組數(shù),而不是長度和,否則循環(huán)會很長。

2.如果第一個木棍選完了,沒找到合適的使它權(quán)值和為枚舉的答案,就不可能有答案了。

3.如果第i個木棍能組成ans,但其余的不能了,也不能有答案了。

4.當(dāng)長度小于ans時,前面的不用在循環(huán)了,直接從當(dāng)前位置繼續(xù)往后找就好了。

5.if else if 寫成if else 的話,容易漏掉長度和 > ans的情況。。。。坑死了這里。。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 500 + 7;int a[maxn], n, f, g, df;bool vis[maxn];bool cmp(int& a,int& b){    return a > b;}bool dfs(int cur,int c,int pos,int len){    if (cur == f) {        if (len == n)return true;        return false;    }    for (int i = pos; i < n; ++i){        if (!vis[i]){            if (c+a[i] == g){                vis[i] = 1;                if (dfs(cur+1,0,0,len+1)) return true;                vis[i] = 0;                return false;                while(i+1 < n && a[i+1] == a[i])++i;            }            else if (c+a[i] < g){                vis[i] = 1;                if ( dfs(cur,c+a[i],i+1,len+1) ) return true;                vis[i] = 0;                while(i+1 < n && a[i+1] == a[i])++i;            }            if (!pos)return false;        }    }    return false;}int main(){    while (~scanf("%d",&n) && n){        int sum = 0;        bool ok = 1;        for (int i = 0; i < n; ++i) {            scanf("%d",a+i);            sum += a[i];            if (i){                if (a[i] != a[i-1])ok = 0;            }        }        if (ok) {            PRintf("%d/n",a[0]);            continue;        }        sort(a,a+n,cmp);        int ans = sum;        for (int i = n - 1; i > 1; --i){            if (sum % i == 0 && sum / i >= a[0]){                f = i;                g = sum/i;                memset(vis,0,sizeof vis);                if (dfs(0,0,0,0)){                    ans = g;                    break;                }            }        }        printf("%d/n",ans);    }    return 0;}/**95 2 1 5 2 1 5 2 141 2 3 40**/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汉川市| 微博| 三明市| 会理县| 新密市| 海兴县| 固原市| 宁国市| 宝山区| 邵阳市| 巴中市| 营山县| 丽江市| 千阳县| 囊谦县| 桑日县| 共和县| 定边县| 珲春市| 广平县| 崇阳县| 买车| 咸丰县| 彭阳县| 娱乐| 镇原县| 宜丰县| 绥阳县| 银川市| 昌宁县| 台江县| 四川省| 尼木县| 若尔盖县| 苍溪县| 冀州市| 陆河县| 郯城县| 台东市| 西林县| 册亨县|