欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[算法] 分割等码和子集码

最编程 2024-10-17 09:58:20
...
import java.util.*;
 
 
public class Solution {
    public boolean partition (int[] nums) {
        // write code here
        int n = nums.length;
        // 求sum和最大值
        int sum = 0;
        for(int i = 0;i < n;i++)
        {
            sum += nums[i];
        }
        // 和为奇数
        if (sum % 2 != 0) {
            return false;
        }

        sum /= 2;
        
        // 初始化
        boolean[][] dp = new boolean[n][sum + 1];
        dp[0][0] = true;
       
        for (int i = 1; i < n; i++) {
            for (int j = 1; j <= sum; j++) {
                if (j >= nums[i]) {
                    dp[i][j] = dp[i - 1][j] | dp[i - 1][j - nums[i]];
                } else {
                    dp[i][j] = dp[i - 1][j];
                }
            }
        }
        // 返回最终结果
        return dp[n - 1][sum];
    }
}

推荐阅读