POJ1011洛谷过了,但POJ上WA了。
https://www.luogu.com.cn/paste/dk6r5t9o
POJ1011无法解决
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 兔子递归 2022-08-14 10:00关注
你看一下这个行不行:
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; /** * created by 吴家俊 on 2019/9/17. */ public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = scanner.nextInt(); ArrayList<Integer> list = new ArrayList(); int sum; while (count != 0) { sum = 0; for (int i = 0; i < count; i++) { int k = scanner.nextInt(); list.add(k); sum += k; } Bar bar = new Bar(list, sum); bar.inputResult(); count = scanner.nextInt(); //清空list list.clear(); } } } class Bar { private ArrayList<Integer> list;//存储被切后各个棒的长度 private int[] visit; //访问数组标记某个数是否被使用过 0未使用 1使用 private int len; //预测最初每个棒的长度 private int n; //最初棒的个数 private int sum; //棒的总长度 private boolean flag; //标记是否得出结果 public Bar(ArrayList<Integer> list, int sum) { this.list = list; this.sum = sum; Collections.sort(list); Collections.reverse(list); //按棒长降序排序 } private void init() { visit = new int[list.size()]; flag = false; } public void inputResult() { for (int i = list.get(0); i <= sum; i++) { //1、缩小len的取值范围 if (i == sum) { System.out.println(i); } else if (sum % i == 0) { //2、再次缩小len的取值范围 n = sum / i; len = i; init(); dfs(0, len, 0); if (flag) { break; } } } } /** * @param index 遍历的起始下标 * @param l 当前剩余长度 为0时 表示凑成了一个原先的棒 * @param now 当前已经凑成的棒的根数 为n时 表示得到解 */ private void dfs(int index, int l, int now) { if (flag) return; if (now >= n) { flag = true; System.out.println(len); return; } for (int i = index; i < visit.length; i++) { if (visit[i] == 0 && l - list.get(i) >= 0) { visit[i] = 1; //标记已访问 if (l - list.get(i) == 0) { //凑成了一根棒 dfs(0, len, now + 1); //开始寻找下一个棒的起点 } else { dfs(index + 1, l - list.get(i), now); } visit[i] = 0; //还原 if (flag) return; if (l == len) return; //3、之前的决策有问题,回退到上一根棒的拼凑过程 while (i + 1 < visit.length && list.get(i + 1) == list.get(i)) {//4、该点失败后,后面相同的点不用再尝试 i++; } } } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 做个有关计算的小程序
- ¥15 MPI读取tif文件无法正常给各进程分配路径
- ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
- ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
- ¥15 setInterval 页面闪烁,怎么解决
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化