bitset优化
文章平均质量分 66
Selvaggia
这个作者很懒,什么都没留下…
展开
-
砝码称重(考虑下标越上界)
谨记:考虑下标越界时不要仅仅考虑越下界,数组上界也要考虑。为了避免考虑不周导致遗漏,需要使得递推式保持。想要不考虑上界,就把数组大小开到两倍。推到而来,根据不同途径,反推x的值。,那么原来重的一边会变成轻的一边,,即重的一边与轻的一边的差值为。依次考虑由简单到复杂的情况,、放在轻的一边 假设之前是。、放在重的一边,假设之前是。,那么重的一边还是更重,思路就没这么清晰过嘿嘿嘿。,放在重的一边自然是。原创 2023-03-22 09:26:55 · 269 阅读 · 0 评论 -
砝码称重dp、bitset优化(所有元素的和、差的集合)
砝码称重好歹想到动态规划!!!该有这样动态规划的思想,并不一定需要自己考虑周全,要让程序递推前i个数是否能产生j这个数值#include <iostream>#include <algorithm>#include <set>using namespace std;const int N=105;int a[N];int n;int dp[N][100005];//该有这样动态规划的思想,并不一定需要自己考虑周全,要让程序递推 //前i个数是否能原创 2022-04-06 09:16:58 · 555 阅读 · 0 评论 -
对于dp值只有0、1两种状态的背包问题
对于dp值只有0、1两种状态的背包问题,一来恰好装满型不用初始化为负无穷,因为只有0,1进行比较。二来,状态转移方程一般不再不再是朴素的max(dp[i-1][j],dp[i-1][j-w[i]]+v[i],而极有可能dp[i][j]=dp[i-1][j]; //不取if(dp[i-1][j-w[i]]) dp[i][j]+=dp[i-1][j-w[i]];或者不用if判断,dp值代表是否能到达这种状态,只要 取和不取两种决策种至少有一种可以达到该状态,dp[i][j]就为1,能达到dp[i][原创 2022-03-03 21:42:58 · 124 阅读 · 0 评论 -
bitset优化(bitset枚举一个序列所有子集)
这里写目录标题C++标准库bitset对象的初始化及操作bitset上场C++标准库bitset对象的初始化及操作// bit当作数组,下标0对应的是最右边的元素 bitset<10> bit; bit[0]=1;//0000000001 cout<<bit<<endl; bit[9]=1;//1000000001,上次的bit[0]=1噢 cout<<bit<<endl; bitset<10> b(string(原创 2022-02-28 22:28:15 · 1245 阅读 · 1 评论 -
必须使用的硬币(从后往前递推、枚举缺少这枚硬币的情况)bitset+二进制优化多重背包
4120:硬币分别存放 从前往后、从后往前的地推结果,枚举缺少第 i 枚硬币的情况#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N=205;int w[N];int dp[N][10005]; int dp2[N][10005]; int main(){ int n,x; cin>>n>>x; fo原创 2022-03-01 22:47:19 · 305 阅读 · 0 评论