思维|状压dp

lc

当前状态 k 选中了偶数个数字,则枚举其中一对数字 i,j

fk \^ (1 \<\< i) \^ (1 \<\< j)

把 k 消掉第 i 位的 1 以及第 j 位的 1

lc1799

dp+状压

预处理所有数对的最大公约数

状态压缩动态规划枚举数字选取状态,++计算选取偶数个数字时的最大配对得分++

最终返回选完所有数字的最大得分

  1. 定义状态: fk 表示选取状态为 k (二进制位表示数字是否被选中)时的最大得分

  2. 初始状态: f0 = 0 (没有选中任何数字时得分为0),其余状态初始化为0

  3. 状态转移:若当前状态 k 选中了偶数个数字,则枚举其中一对数字 i,j ,从状态 k ^ (1 << i) ^ (1 << j) (去掉这对数字的状态)转移而来,加上当前配对的得分

  4. 遍历顺序:++按状态二进制中1的数量从小到大遍历++,确保计算当前状态时,依赖的前置状态已计算完成

  5. 答案输出:最终答案为 f(1 \<\< m) - 1 ,即所有数字都被选中时的最大得分。

class Solution {

public:

int maxScore(vector<int>& nums) {

int m = nums.size();

int gmm;

for (int i = 0; i < m; ++i) {

for (int j = i + 1; j < m; ++j)

++gij = gcd(numsi, numsj);++

//pre-p

}

int f1 \<\< m;

memset(f, 0, sizeof f);

for (int k = 0; k < 1 << m; ++k) {

++int cnt = __builtin_popcount(k);++

if (cnt % 2 == 0) {

for (int i = 0; i < m; ++i) {

++if (k >> i & 1) {++

for (int j = i + 1; j < m; ++j) {

++if (k >> j & 1)
fk = max(fk, fk \^ (1 \<\< i) \^ (1 \<\< j) + cnt / 2 * gij);
++

}

}

}

}

}

++return f(1 \<\< m) - 1;++

}

};

lc995

贪心+滑窗

队列维护翻转区间的左端点,遍历数组时判断当前位置是否需要翻转,能翻转则记录左端点并计数,无法翻转则返回-1,最终得到最小翻转次数

class Solution {/++/贪心地从左到右依次翻转++

public:

int minKBitFlips(vector<int>& A, int K) {

int n=A.size(),ans=0;

queue<int> q;

for(int i=0;i<n;++i){

if(!q.empty()&& i-q.front()>=K) q.pop();

//维护与当前位置的距离<=K的翻转位置(左端点)

if((Ai+q.size())%2==0){ //需要翻转

if(i+K>n) return -1; //无法翻转

q.push(i);

++ans;

}

}

return ans;

}

};

队列动态维护「当前位置被翻转了几次」,快速判断要不要翻转,从而用贪心策略找到最少翻转次数

++队列的大小 = 当前位置 i 被翻转的次数++

从左到右遍历,遇到 0 就翻转它开头的 K 位,因为如果现在不翻,后面就没机会了

相关推荐
云淡风轻~窗明几净27 分钟前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心41 分钟前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海1 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
荆棘鸟智能2 小时前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
葫三生3 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源
catcatuncle3 小时前
OpenWorkBuddy 部署排错手册:从源码启动到自己搭一个给团队用,七个最容易卡住的地方
算法
avi91113 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
淡海水3 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
碧海银沙音频科技研究院3 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
云淡风轻~窗明几净3 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论