zoukankan      html  css  js  c++  java
  • leetcode 第 48 场双周赛

    第三题:1798. 你能构造出连续值的最大数目

    思路:就是找到最小的不能被表示的整数

    贪心,如果$[0, sum_{i}]$ 都能被表示出来,若$a_{i+1} > sum_{i}$,则$sum_i + 1$就不能被表示;若$a_{i+1} <= Sum_{i}$,则 $[0, Sum_{i+1}]$ 都能被表示;

    所以,遍历,判断每一个 $a_i$ 即可。

    class Solution {
    public:
        int getMaximumConsecutive(vector<int>& coins) {
            sort(coins.begin(), coins.end());
            int sum = 0;
            for(auto x : coins) {
                if(x > sum+1)  return sum+1;
                sum += x;
            }
            return sum+1;
        }
    };

    第四题:1799. N 次操作后的最大分数和

    思路:基本的状压DP,$dp[i] = max(dp[i], dp[i - (1<<j) - (1<<k)] + score)$

    class Solution {
    public:
        int gcd(int a, int b) {
            return b==0 ? a : gcd(b, a%b);
        }
    
        int maxScore(vector<int>& nums) {
            int n = nums.size();
            vector<int>dp(1<<n, 0);
            for(int i = 0;i < (1 << n);i++)
            {
                int cnt = 0;
                for(int j = 0;j < n;j++)
                    if(i & (1<<j)) cnt++;
                if(cnt%2)  continue;
                for(int j = 0;j < n;j++)
                    for(int k = j+1;k < n;k++)
                        if(((i>>j)&1) == 1 && ((i>>k)&1) == 1)
                        {
                            // cout << i << " " << i-(1<<j)-(1<<k) << endl;
                            dp[i] = max(dp[i], dp[i-(1<<j)-(1<<k)] + gcd(nums[j], nums[k]) * ((n-cnt)/2+1));
                        }
            }
            return dp[(1<<n)-1];
        }
    };
    个性签名:时间会解决一切
  • 相关阅读:
    PeCheck
    模拟木马
    青柠网络验证
    青柠网络验证一键合成工具(exe程序和网络验证合成)
    如果想看我以前发的文章,请到下面地址查看
    星空QQ音乐下载2.0 (可下载收费音乐)
    vmp分析文章
    星空QQ群1.0模块
    青柠网络验证
    Java之IO操作总结
  • 原文地址:https://www.cnblogs.com/lfri/p/14566472.html
Copyright © 2011-2022 走看看