首页 > 其他分享 >【20221222】每日一题

【20221222】每日一题

时间:2022-12-22 11:33:23浏览次数:41  
标签:return gcd nums int 每日 20221222 dp GCD

【LC1799】

class Solution {
public:
    int n;
    vector<int> dp; //状态DP;
    vector<vector<int>> gcd; //gcd<i, j>:nums[i], nums[j] gcd的结果;

    int GCD(int x, int y)
    {
        return y == 0 ? x : GCD(y, x % y);
    }

    int maxScore(vector<int>& nums) {
        n = nums.size();
        dp.resize(1 << n, 0);
        gcd.resize(n, vector<int>(n , 0));
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++) {
                gcd[i][j] = GCD(nums[i], nums[j]);
            }

        return dfs(1, (1 << n) - 1, 0, nums);
    }

    int dfs(int idx, int mask, int sum, vector<int>& nums)
    {
        //因为不可能超过一半size,gcd的对称性;
        if (idx >= n / 2 + 1) return sum;
        //若是已经被处理过,则直接使用之前的结果;
        if (dp[mask] > 0) return sum + dp[mask];
        int ans = 0;
        for (int i = 0; i < n; i++) {
            if (((1 << i) & mask ) == 0) continue;
            for (int j = i + 1; j < n; j++) {
                if (((1 << j) & mask) == 0) continue;
                int next_state = mask^(1 << i) ^ ( 1<< j);
                ans = max(ans, dfs(idx + 1, next_state, sum + idx * gcd[i][j], nums));
            }
        }

        dp[mask] = ans - sum;   
        return ans;
    }
};

基本思路是状态DP + DFS记忆化搜索,关键在于n的取值得到的。

标签:return,gcd,nums,int,每日,20221222,dp,GCD
From: https://www.cnblogs.com/zhanghanLeo/p/16998014.html

相关文章

  • 每日随笔更新小的细节技术
    centos如果有的repo失效,每次安装或者更新都会报错  首先执行yumrepolist,查看当前已经安装的repo及ID  如果要去除某一个repoid更新的话,可以执行如下命令:yum......
  • 工作中的有效沟通 - 20221222
    什么是沟通沟通的概念沟通是人与人之间、人与群体之间思想与感情的传递和反馈的过程,以求思想达成一致和感情的通畅。什么是沟通?沟通(communication)是人们分享信息、思想......
  • 每日三题 - 20221222
    1.一位项目经理得知,由于持续的罢工,该项目的进口设备尚未被海关放行。项目经理首先应该怎么做?A.执行定性风险分析B.执行定量风险分析C.与团队一起审查风险影响D.实施风险应......
  • 每日食词—day054
    forecastv. n.预测、预报、预告、预见deadlyembrace死锁、僵局versionn. v.版本、版次、译本requestn. v.请求、要求、申请、指示、回应、确认chainn......
  • 每日一题-枚举+乘法原理
    孤独的照片-枚举+乘法原理voidsolve(){ intn; strings; cin>>n>>s; intans=0; for(inti=0;i<n;++i){ intl=i-1,cnt1=0; while(......
  • 每日食词—day053
    consumev.消耗、消费、耗尽、消灭togetheradv. adj.一起、在一起compressn. v.压缩、压紧iterableadj.可迭代的、可迭代对象、可遍历relatedadj. v.......
  • 每日算法之丑数
    JZ49丑数题目我们先看到题目,把只包含质因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。方法1:质......
  • 每日食词—day052
    exposev. n.公开、暴露、露出、揭发、曝光viewportn.视窗、视口consigneen.收货人、收件人、受托人、承销人applicationn.应用、应用程序、应用软件、用......
  • 力扣-739-每日温度
    返回一个数组,ans[i]表示相对于第i天的温度而言,下一个更高的温度出现在几天后如果没有就是0一开始接单粗暴地两层for循环遍历,不出意外地超时了后来又想到可以排序后比对......
  • 每日算法之最长不含重复字符的子字符串
    JZ48最长不含重复字符的子字符串描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1输入:"abcabcbb"返回值:3说明:因为无重复......