合集-二进制dp

摘要:原题链接 这真的是橙题吗 题解 读题,每个材料都有用或不用两种选择,然后n的数据范围也很小,所以考虑二进制dp (别管我为什么不叫状态压缩) 遍历 0 到 2201(十进制下),如果存在互相矛盾的1,代表这个状态不能用 code #include<bits/stdc++.h> usi 阅读全文
posted @ 2024-04-05 13:29 纯粹的 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 二进制表示每包糖果包含的味道,因为有一种拼接的感觉,然后背包dp,注意这里每个材料不止只能取一个 code #include<bits/stdc++.h> using namespace std; int dp[1<<22]={0},candy[105]={0}; const int 阅读全文
posted @ 2024-04-05 14:13 纯粹的 阅读(43) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 二进制dp etc: 令 dp[00110] 代表前两个任务选23两个人出战的最大成功率 则 dp[00110]=max(dp[00010]+a[3][2],dp[00100]+a[2][3]) code #include<bits/stdc++.h> using n 阅读全文
posted @ 2024-04-05 15:25 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 请看代码upperbound是为了找出最大的小于等于 code #include<bits/stdc++.h> using namespace std; int a[20]={0},sum[100005]={0},dp[1<<22]={0};//dp代表当前状态能买多少件商品,sum 阅读全文
posted @ 2024-04-05 23:18 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 关键因素:bibi1 至少有一位都是一 这是我第一份代码 #include<bits/stdc++.h> using namespace std; int a[100005],dp[100005]={0}; int main() { int n; ci 阅读全文
posted @ 2024-05-13 14:59 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.由于是除二操作,所以最后的平均数一定能表示成 k112i1+...+kt12it 的形式 2.最小的 12i 由于没有往下再分,所以数量一定是偶数,把他们的数量除二 阅读全文
posted @ 2024-07-18 09:29 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 任何数一定可以被二进制表示下最低位的一及以下的二次方数整除 code #include<bits/stdc++.h> #define ll long long #define lowbit(x) ((x)&(-x)) using namespace std; void solve() 阅读全文
posted @ 2024-07-23 09:38 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 看到数据范围,想到二进制表示所有已经上去的人的集合的最小乘坐次数,做法为遍历所有子集再遍历所有子集 时间复杂度 k=0nCnk2k= O(3n) 太高了 考虑优化,对于同一个集合、同样最小乘坐次数,总有电梯有空位,而空位越大的乘坐配置越优 依照 阅读全文
posted @ 2024-07-28 16:36 纯粹的 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示