为了能到远方,脚下的每一步都不|

fishcanfly

园龄:8年10个月粉丝:0关注:4

【leetcode 1799 N次操作后的最大分数和】状态压缩

 

 

 

 

 

回溯会超时,状态压缩

复制代码
class Solution {
    public int maxScore(int[] nums) {
        int len = nums.length;
        int size = 1 << len;
        int[] dp = new int[size];
        int[][] g = new int[len][len];

        for (int i = 0; i < len; i++) {
            for (int j = i + 1; j < len; j++) {
                g[i][j] = g[j][i] = gcd(nums[i], nums[j]);
            }
        }
        for (int x = 0; x < size; x++) {
            int c = Integer.bitCount(x);
            if (c % 2 == 1) {
                continue;
            }
            for (int j = 0; j < len; j++) {
                for (int k = j + 1; k < len; k++) {
                    if ((x & (1 << j)) > 0 && (x & (1 << k)) > 0) {
                        int tmp = x - (1<<j) - (1<<k);
                        
                        dp[x] = Math.max(dp[x], dp[tmp]+ c/2 *g[j][k]);
                    }

                }

            }
        }
        return dp[size-1];

    }

    public int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        return gcd(b, a % b);
    }
}
复制代码

 

本文作者:fishcanfly

本文链接:https://www.cnblogs.com/fishcanfly/p/15863422.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   fishcanfly  阅读(44)  评论(1编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起