【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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步