为了使得方案的形式较为单一,不妨强制物品体积为1或$\ge \lceil\frac{w}{2}\rceil$,那么假设最终有$x$个1且$\ge \lceil\frac{w}{2}\rceil$的物品体积依次为$a_{1},a_{2},...,a_{n-x}$,不难发现方案数即为$\sum_{i=1}^{n-x}{x\choose w-a_{i}}$

暴力枚举$x$,并不妨再强制方案数恰为$k$(而不是模$p$意义下),此时即选不超过$n-x$个${x\choose i}$使得其和恰为$k$(其中$i\in [0,\lfloor\frac{w}{2}\rfloor]$,由于$w\ge 50$不妨变为$\in [0,\lfloor\frac{x}{2}\rfloor]$,即问题与$w$无关)

每一次选$i=\max_{0\le j\le 8,{16\choose j}\le k}j$,由于${x\choose 0}=1$,重复此过程最终总可得到$k$,并考虑所有$k\in [0,2\cdot 10^{4}]$后可以发现只需要取$x=13$或$14$即可保证有解

时间复杂度为$o(tn)$,可以通过

(dark_bzoj上该题似乎没有spj)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 15
4 vector<int>v;
5 int t,n,m,x,w,C[N][N];
6 int main(){
7 for(int i=0;i<N;i++){
8 C[i][0]=C[i][i]=1;
9 for(int j=1;j<i;j++)C[i][j]=C[i-1][j-1]+C[i-1][j];
10 }
11 scanf("%d",&t);
12 while (t--){
13 scanf("%d%*d%d",&w,&n);
14 for(int x=13;x<=14;x++){
15 m=n;
16 v.clear();
17 for(int i=0;i<x;i++)v.push_back(1);
18 for(int i=(x>>1);i>=0;i--){
19 for(int j=0;j<m/C[x][i];j++)v.push_back(w-i);
20 m%=C[x][i];
21 }
22 if (v.size()<=40){
23 printf("%d\n",(int)v.size());
24 for(int i=0;i+1<v.size();i++)printf("%d ",v[i]);
25 printf("%d\n",v.back());
26 break;
27 }
28 }
29 }
30 return 0;
31 }

[bzoj4971]记忆中的背包的更多相关文章

  1. BZOJ 4971: [Lydsy1708月赛]记忆中的背包

    神仙构造 分成x个1和一堆>=w-x的大物品 (x<=20 w>=50) 则拼成w的方案中有且仅有一个大物品 若最终序列中有x个1,有一个大物品为w-k,可以提供C(x,k)种方案 ...

  2. 洛谷 P4125 [WC2012]记忆中的水杉树【扫描线+set+线段树】

    我没有找到能在bzojAC的代码--当然我也WA了--但是我在洛谷过了,那就假装过了吧 minmax线段树一开始写的只能用min更新min,max更新max,实际上是可以互相更新的-- 首先看第二问, ...

  3. [WC2012]记忆中的水杉树

    https://www.luogu.org/problemnew/show/P4125 题解 首先一开始所有的线段互不相交. 那么对于第二问来说,一定存在一种方法使得所有线段都朝着一个方向动. 比如说 ...

  4. 记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!

    本文适合对图形表现有兴趣的美术或者开发人员 本文作者:HelloGitHub-Joey 早期的的显示设备像素颗粒较大,使得显示内容的颗粒感严重,像是由一堆方块组成的.比较好的例子就是 GBA 上的游戏 ...

  5. 借助Algorithmia网站API:用AI给黑白照片上色,复现记忆中的旧时光

    先看DEMOhttps://demos.algorithmia.com/colorize-photos/ 了解ColorfulImageColorizationhttps://algorithmia. ...

  6. Element ui 中使用table组件实现分页记忆选中

    我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 示例如下 <el-table :data="tableData&quo ...

  7. BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )

    从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...

  8. 关于css中pointer-events属性的怪异行为

    在我的记忆中pointer-events就是用来进行事件穿透的,也就是说,如果给父元素设置了pointer-events:none,那么父元素不再监听鼠标事件事件(类似于touch,click这样的) ...

  9. 背包九讲 && 题目

    ★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1 ...

随机推荐

  1. Redis的单线程架构

    前言 在一定的策略下适度地初始化线程池的线程数有利于提高CPU的利用率,达到高效率地在同一段时间内处理多个任务,最佳的线程数量一般是 最佳线程数=(线程等待的时间与线程CPU执行时间之比+1)*CPU ...

  2. 极简SpringBoot指南-Chapter03-基于SpringBoot的Web服务

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  3. Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...

  4. C# datagridview、datagrid、GridControl增加行号

    01 - WinForm中datagridview增加行号 在界面上拖一个控件dataGridView1,在datagridview添加行事件中添加如下代码: private void dataGri ...

  5. Java(32)File类的介绍

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228444.html 博客主页:https://www.cnblogs.com/testero ...

  6. python3去除行号

    问题:在复制一些代码时会同时复制每行的行号,删除比较麻烦,所以利用python3本身的代码进行一键删除. # 导入re 模块来使用正则表达式 import re """去 ...

  7. 需求存在,功能存在——Alpha阶段性总结

    0.Alpha开发成果 题士Alpha发布报告 题士开发记录 1.任务划分 Alpha阶段大致将任务划分为Design,Develop和Test三类 Design型任务包含页面UI设计和接口API设计 ...

  8. [no code][scrum meeting] Beta 10

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月25日15:00,主持者:伦泽标 下次例会时间:5月26日11:30,主持者: 一.工作汇报 ...

  9. OO面向对象第三次作业总结

    面向对象第三次作业总结 一.JML基础梳理及工具链 注释结构 行注释://@annotation 块注释:/*@ annotation @*/ 两种注释都是放在被注释部分上面. 常见表达式 原子表达式 ...

  10. 大闸蟹的项目分析——CSDN APP

    大闸蟹的软件案例分析 项目 内容 这个作业属于那个课程 班级博客 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学习软件工程的相关知识 这个作业在哪个具体方面帮我实现目标 从多角度分析软件 一 ...