状压dp

对于一个集合,他一有2^n个子集,而状态压缩就是枚举这些子集,每一个状态就是一个由01构成的集合,如果为0就表示不选当前的元素,否则就表示选。因为状态压缩将每一个状态压缩成了一个用二进制表示的数,所以不光可以节省空间,还可以节省时间。
因为是枚举子集,所以时间复杂度为O(2^n)),一般使用的标志就是n≤20

代码:
#include
using namespace std;
#define endl '\n'
#define int long long
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
   
    int n,w;
cin>>n>>w;
    vector cnt(14);
    for(int i=1;i<=n;i++)
    {
    int x;
cin>>x;
    cnt[x]++;
}
vector sum(1<<13);
vector dp(1<<13,14);
    //初始化
for(int i=1;i<(1<<13);i++) //枚举2的13次方的状态
{
for(int j=0;j<13;j++) //每个状态代表的值
{
if(i>>j&1) sum[i]+=cnt[j+1];
}
}
dp[0]=0;
for(int i=1;i<(1<<13);i++) //枚举每个状态
{
for(int j=i;j;j=(j-1)&i) //dp转移 该状态是从前一个状态转移而来 0101 从0001或0100转移
{
if(sum[j]>w) continue;
else
dp[i]=min(dp[i],dp[i-j]+1);
}
}

cout<return 0;
}#许愿池#
全部评论

相关推荐

前端自动化测试是一种在前端开发过程中使用工具和脚本自动执行各种测试任务的方法,以验证代码的正确性、功能性和性能。通过自动化测试,可以有效地减少人工测试的工作量,提高代码质量,减少错误和缺陷,并加速开发迭代过程。以下是一些常用的前端测试工具:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&amp;uuid=07d53be4cd034a4ab270d500feebcc8dJest:Jest&nbsp;是一个流行的&nbsp;JavaScript&nbsp;测试框架,特别适用于前端项目。它支持单元测试、集成测试和快照测试,具有简单的语法和强大的功能,可以运行在&nbsp;Node.js&nbsp;环境中。Mocha:Mocha&nbsp;是另一个流行的&nbsp;JavaScript&nbsp;测试框架,它提供了灵活的测试结构和丰富的插件支持。Mocha&nbsp;可以用于编写各种类型的测试,包括异步测试。Cypress:Cypress&nbsp;是一个端到端的测试框架,专注于模拟用户操作与应用程序的交互。它提供实时预览、自动重载和断言,用于编写可靠的端到端测试。Puppeteer:Puppeteer&nbsp;是一个&nbsp;Node.js&nbsp;库,用于控制无头&nbsp;Chrome&nbsp;浏览器。它可以用来进行各种&nbsp;Web&nbsp;页面操作,包括生成截图、爬取数据以及进行自动化测试。Enzyme:Enzyme&nbsp;是一个用于&nbsp;React&nbsp;组件测试的工具,提供了轻松操作、断言和模拟渲染&nbsp;React&nbsp;组件的能力。WebDriverIO:WebDriverIO&nbsp;是一个自动化测试框架,支持多种浏览器和平台,适用于编写功能测试和端到端测试。Karma:Karma&nbsp;是一个测试运行器,它可以在多个浏览器中运行测试,用于确保代码在不同环境中的一致性。Linting&nbsp;工具:虽然不是传统的测试工具,但&nbsp;linting&nbsp;工具如&nbsp;ESLint&nbsp;和&nbsp;Stylelint&nbsp;可以帮助检查代码风格和潜在错误,从而提高代码质量。这些工具可以根据项目需求进行选择,常常结合在一起使用,以确保前端应用在各个方面的质量和稳定性。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务