首页 > 其他分享 >P1441 砝码称重 状压+bitset的组合

P1441 砝码称重 状压+bitset的组合

时间:2023-03-19 21:01:40浏览次数:47  
标签:ch const P1441 int 状压 bitset define

这道题最妙的是移入bitset,来统计能组成那些数

令bitset<2010> S;

一开始初始化S[0]=1

对于w[i],S<<w[i]表示原本能组成的数加上w[i]后组成的新数

但原本的数我们依旧是要的,所以便是S=S|(S<<w[i])

S.count返回S中1的个数,但是无符号的数据类型要转int,注意要减去(S[0]=1)这种不合法情况

Code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back   
#define popb pop_back  
#define fi first
#define se second
const int N=30;
//const int M=;
//const int inf=0x3f3f3f3f;     
//const ll INF=0x3ffffffffffff;
int T,n,m,w[N];
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}
int main()
{
//    freopen("","r",stdin);
//    freopen("","w",stdout);
    n=read(),m=read();
    for(int i=0;i<=n-1;i++) w[i]=read();
    int ans=0;
    for(int i=0;i<(1<<n);i++)
    {
        if(__builtin_popcount(i)==n-m)
        {
            bitset<2010> S;
            S[0]=1;
            for(int j=0;j<=n-1;j++)
                if(i&(1<<j)) S=S|(S<<w[j]);
            ans=max(ans,(int)S.count()); 
        }
    }
    printf("%d",ans-1);
    return 0;
}

 

标签:ch,const,P1441,int,状压,bitset,define
From: https://www.cnblogs.com/Willette/p/17234251.html

相关文章

  • 状压进阶
    目录TJOI2015棋盘PKUSC2018最大前缀和NOI2015寿司晚宴ZJOI2016小星星JSOI2016位运算THUWC2017随机二分图PKUWC2018随机算法JLOI2016字符串覆盖USACO13JANIsland......
  • 【P2109 [NOI2007]】 生成树计数(状压 dp + 矩阵快速幂)
    状压dp+矩阵快速幂优化。感觉题解区几篇题解说得云里雾里的……也没有一定的证明……Link.SolutionPart1dp状态设计发现\(k\)的范围很小,具有很强的指向性——......
  • 2023.3.14 状压 dp 模拟赛题解
    好强啊。不说是谁了,都好强啊呜呜呜。   首先T1的一个优化luoguP1842奶牛玩杂技,需要一个贪心排序来优化序列顺序。关于贪心排序:像这样有两种及以上性质的序列,......
  • Java位集合之BitMap,BitSet解析
    目录1Java位集合1.1Bit-Map1.1.1简介1.1.2添加1.1.3清除1.1.4查找1.2Bitmap应用1.2.1快速排序1.2.2快速去重1.2.3快速查找1.3BitSet1.4BloomFilters1.4.1简......
  • C++ 中的 bitset
    C++中的\(\textsf{bitset}\)是能够存储\(01\)的容器,这一点看似与布尔(bool)数组很像。而一个布尔类型将会占用\(1\)字节的空间,相对于\(\textsf{bitset}\)来讲\(1\)......
  • BZOJ 4145 [AMPPZ2014]The Prices (状压DP)
    题意你要购买商店,你到第i家商店的路费为,在第家商店购买第种物品的费用为,求最小总费用。分析很容易定义出状态,表示到第行,买的物品情况为的最小费用。按照往常的套路是转移时......
  • HDU 5418 Victor and World 状压DP的TSP问题
     VictorandWorldTimeLimit:4000/2000MS(Java/Others)    MemoryLimit:262144/131072K(Java/Others)TotalSubmission(s):1855    AcceptedSubmission......
  • bitset小专题(待续)
    bitset:一个01位如果用bool存的话需要1byte,而用bitset只需要1bit(=1/8byte)每次两个集合取并的时候可以除以一个大常数(32/64),从而优化复杂度LOJ515设\(dp[i]\)表示考......
  • 状压 DP(ZR)
    [PKUSC2018]最大前缀和从部分分出发考察性质,“满足a中至多一个负数”怎么做?好吧这个很简单,但是它提醒我们从负数的POV考虑。不难发现,最大前缀和的结束为止一定是某个......
  • bitset简易使用方法
    何为bitset一个stl,可以大大减少储存布尔数所需的空间,本质上就是个存二进制数的容器具体而言,省的空间是用int存的\(\frac{1}{32}\)示例bitset<N>bi(10111);//括号里的是......