zoukankan      html  css  js  c++  java
  • [UVA307]小木棍 Sticks

    题目大意:有一堆小木棍,把它们接成相同长度的小木棍,问结果的小木棍的最小长度是多少,多组数据

    题解:$dfs$,各种剪枝。

    卡点:



    C++ Code:

    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #define maxn 55
    const int inf = 0x3f3f3f3f;
    
    int n, Min, Max, sum;
    int cnt[maxn];
    bool halt;
    void dfs(int res, int sum, int len, int now) {
    	if (!res) {
    		printf("%d
    ", len);
    		halt = true;
    		return ;
    	}
    	if (sum == len) return dfs(res - 1, 0, len, Max);
    	for (int i = now; i >= Min; --i) if (cnt[i] && sum + i <= len) {
    		--cnt[i];
    		dfs(res, sum + i, len, i);
    		if (halt) return ;
    		++cnt[i];
    		if (!sum || sum + i == len) return ;
    	}
    }
    
    int main() {
    	scanf("%d", &n);
    	while (n) {
    		Min = inf, Max = sum = 0, halt = false;
    		__builtin_memset(cnt, 0, sizeof cnt);
    		for (int i = 0, x; i < n; ++i) {
    			scanf("%d", &x);
    			if (x <= 50) {
    				++cnt[x], sum += x;
    				Min = std::min(x, Min);
    				Max = std::max(x, Max);
    			}
    		}
    		for (int i = Max; i <= sum >> 1; ++i) if (sum % i == 0) dfs(sum / i, 0, i, Max);
    		if (!halt) printf("%d
    ", sum);
    		scanf("%d", &n);
    	}
    	return 0;
    }
    
  • 相关阅读:
    awk,seq,xarg实例使用
    Docker安装yapi
    基于阿里搭载htppd访问
    锐捷结课作业
    基于centos7搭建kvm
    基于django实现简易版的图书管理系统
    python 自定义log模块
    Interesting Finds: 2008.01.13
    Interesting Finds: 2008.01.24
    Interesting Finds: 2008.01.17
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10326407.html
Copyright © 2011-2022 走看看