帆软笔试 立方数

import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;

public class CubeSumDP {

public static ArrayList<Integer> findCubes(int N) {
    int[] dp = new int[N + 1];
    int[] lastUsed = new int[N + 1]; // 用于追踪每个状态对应的立方数

    Arrays.fill(dp, Integer.MAX_VALUE);
    Arrays.fill(lastUsed, -1);

    dp[0] = 0; // base case

    // 预计算所有的立方数
    ArrayList<Integer> cubes = new ArrayList<>();
    for (int i = 1; i * i * i <= N; i++) {
        cubes.add(i * i * i);
    }

    // 动态规划填充dp数组
    for (int i = 1; i <= N; i++) {
        for (int cube : cubes) {
            if (cube > i) continue;
            if (dp[i] > dp[i - cube] + 1) {
                dp[i] = dp[i - cube] + 1;
                lastUsed[i] = cube;
            }
        }
    }

    // 重构解
    ArrayList<Integer> result = new ArrayList<>();
    int current = N;
    while (current > 0) {
        result.add((int)Math.cbrt(lastUsed[current]));
        current -= lastUsed[current];
    }
    Collections.sort(result,Collections.reverseOrder());
    return result;
}

public static void main(String[] args) {
    int N = 43;
    ArrayList<Integer> result = findCubes(N);
    System.out.println("结果: " + result);
}

}

全部评论
想问一下这个能过所有用例吗,我看那个n可以很大,会超过int,但是这个函数的参数好像改不了😅
1 回复 分享
发布于 2024-10-11 16:49 福建

相关推荐

2024-12-30 12:07
已编辑
中南大学 Java
Java抽象带篮子:狠狠背八股就完事了,可以看看我整理的八股笔记,
查看19道真题和解析 ai智能作图
点赞 评论 收藏
分享
01-03 18:20
已编辑
蚌埠坦克学院 算法工程师
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客企业服务