NC50243 小木棍
题目
- 原题地址:小木棍
- 题目编号:NC50243
- 题目类型:搜索剪枝、BFS
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 32768K,其他语言65536K
1.题目大意
n
根木棍,由k
根长度为l
且相同的长棍截取而成,求原木棍的最小长度
2.题目分析
- 从以下几个方面考虑剪枝:
- 总长
sum
会被原长l
整除 - 原长一定长于截取后的木棍的最大长度
- 。。。?
- 总长
3.题目代码
#include <bits/stdc++.h>
using namespace std;
int a[61], vis[61], sum, n;
bool dfs(int num,int len,int r,int j){
if(!num&&!r) return true;
if(!r&&num>0) j=0, r=len;
for(int i=j;i<n;i++){
if(a[i]<=r&&!vis[i]){
vis[i] = 1;
if(dfs(num-1,len,r-a[i],i+1)) return true;
vis[i] = 0;
if(a[i]==r||r==len) break;
while(a[i]==a[i+1]) i++;
}
}return false;
}
int main() {
cin >> n;
for(int i=0;i<n;i++) cin >> a[i], sum+=a[i];
sort(a,a+n),reverse(a,a+n);
for(int i=a[0];i<=sum;i++){
if(!(sum%i)&&dfs(n,i,i,0)){cout << i << endl;break;}
}
}
标签:
搜索剪枝
, 广度优先搜索(bfs)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】