当前位置:   article > 正文

蓝桥杯第十届国赛:平方拆分(dfs)_c++蓝桥杯 平方拆分

c++蓝桥杯 平方拆分

将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?
注意交换顺序视为同一种方法,

例如 13^2 + 25^2 + 35^2 = 2019 与 13^2 + 35^2 +25^2 = 2019 视为同一种方法(^代表平方)。

本题填空,直接深搜

1.没次dfs传入本次的减去本次平方

2.最大平方时45*44,所以不能超过45

3.当本次结果小于0时舍去,等于0就说明已经找到一种方法

4.为了去重,我们每次进行时就把当前的平方数i+1,不然会多出总搜索次数

  1. package _10;
  2. public class C {
  3. static int max = 45;
  4. static int cont = 0;
  5. public static void main(String[] args) {
  6. dfs(2019, 0);
  7. System.out.println(cont);
  8. }
  9. private static void dfs(int sum, int n) {
  10. if (sum < 0) {
  11. return;
  12. }
  13. if (sum == 0) {
  14. cont++;
  15. return;
  16. }
  17. for (int i = n; i < max; i++) {
  18. dfs(sum - i * i, i + 1);//本次的平方数数传入
  19. }
  20. }
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/48337
推荐阅读
相关标签
  

闽ICP备14008679号