[bzoj4971]记忆中的背包
为了使得方案的形式较为单一,不妨强制物品体积为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]记忆中的背包的更多相关文章
- BZOJ 4971: [Lydsy1708月赛]记忆中的背包
神仙构造 分成x个1和一堆>=w-x的大物品 (x<=20 w>=50) 则拼成w的方案中有且仅有一个大物品 若最终序列中有x个1,有一个大物品为w-k,可以提供C(x,k)种方案 ...
- 洛谷 P4125 [WC2012]记忆中的水杉树【扫描线+set+线段树】
我没有找到能在bzojAC的代码--当然我也WA了--但是我在洛谷过了,那就假装过了吧 minmax线段树一开始写的只能用min更新min,max更新max,实际上是可以互相更新的-- 首先看第二问, ...
- [WC2012]记忆中的水杉树
https://www.luogu.org/problemnew/show/P4125 题解 首先一开始所有的线段互不相交. 那么对于第二问来说,一定存在一种方法使得所有线段都朝着一个方向动. 比如说 ...
- 记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!
本文适合对图形表现有兴趣的美术或者开发人员 本文作者:HelloGitHub-Joey 早期的的显示设备像素颗粒较大,使得显示内容的颗粒感严重,像是由一堆方块组成的.比较好的例子就是 GBA 上的游戏 ...
- 借助Algorithmia网站API:用AI给黑白照片上色,复现记忆中的旧时光
先看DEMOhttps://demos.algorithmia.com/colorize-photos/ 了解ColorfulImageColorizationhttps://algorithmia. ...
- Element ui 中使用table组件实现分页记忆选中
我们再用vue和element-ui,或者其他的表格的时候,可能需要能记忆翻页勾选,那么实现以下几个方法就ok了 示例如下 <el-table :data="tableData&quo ...
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...
- 关于css中pointer-events属性的怪异行为
在我的记忆中pointer-events就是用来进行事件穿透的,也就是说,如果给父元素设置了pointer-events:none,那么父元素不再监听鼠标事件事件(类似于touch,click这样的) ...
- 背包九讲 && 题目
★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1 ...
随机推荐
- Edit Step Ladders - UVA 10029
题意 题目链接(Virtual Judge):Edit Step Ladders - UVA 10029 题意: 如果单词 \(x\) 能通过添加.删除或修改一个字母变换为单词 \(y\),则称单词 ...
- SpringBoot-集成SpringSecurity
在 Web 开发中,安全一直是非常重要的一个方面. 安全虽然属于应用的非功能性需求,但是从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中. Spring Security官网 ...
- 小数的十进制和二进数转换 “无限不循环”小数的IEEE 754表示
十进制 -> 二进制 将整数部分和小数部分分开处理 例:3.125(10) 其整数部分为11(2) 小数部分按照下面的步骤求解: 0.125 x 2 = 0.25 取0 0.250 x 2 = ...
- 基于Apache Hudi 的CDC数据入湖
作者:李少锋 文章目录: 一.CDC背景介绍 二.CDC数据入湖 三.Hudi核心设计 四.Hudi未来规划 1. CDC背景介绍 首先我们介绍什么是CDC?CDC的全称是Change data Ca ...
- 【UE4 调试】C++ 几种编译方法和小技巧
编译方法 Visual Studio 2019 编译 默认编译 UnrealVS 快速编译 Editor 编译 一般 vs 编译完后,Editor会跟着热编译(有声音) 如果发现编译后代码没更新到Ed ...
- Java序列初始化
1.数组 Java数组可以用元素集合初始化: char[] c=new char[]{'.','.','.','.'}; 而想要用指定数量的相同元素来初始化数组,可以使用Arrays.fill()方法 ...
- SpringBoot整合Prometheus
SpringBoot整合Prometheus 一.需求 二.实现步骤 1.引入jar包 2.application.prometheus文件配置 3.查看指标数据 4.接入到 prometheus 中 ...
- SDIO总线协议
SDIO采用HOST-DEVICE模式,所有通信都由HOST端发命令,DEVICE设备只要解析HOST命令就可与HOST进行通信. SDIO总线的几根线: 1. CLK信号:HOST给DEVICE的 ...
- 创建线程 出现SIGSEGV crash
在Opwrt平台上测试ok的一个网络传输延时测试demo程序移植到Android平台后,运行出现莫名其妙的SIGSEGV crash. 仔细检查过源码,特别是指针等后未发现问题. --------- ...
- Des加密解密(公共方法)
1 public class Des 2 { 3 public static string Encrypt(string message, string key) 4 { 5 DES des = ne ...