题目描述

小L有严重的选择困难症。
早上起床后,需要花很长时间决定今天穿什么出门。
假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度。
小L想知道,有多少种方案,使得选出来的总喜欢值>M
需要注意,每类物品,至多选择1件,可以不选。
 

输入描述:

多组输入
每组数据第一行输入k M(k<=6,1<=M<=1e8),表示有多少类物品
接下来k行,每行以Ai(1<=Ai<=100)开头,表示这类物品有多少个,接下来Ai个数,第j个为Vj(1<=Vj<=1e8),表示小L对这类物品的第j个的喜欢值是多少。

输出描述:

每组输出一行,表示方案数
示例1

输入

2 5
3 1 3 4
2 2 3
2 1
2 2 2
2 2 2

输出

3
8

题解

折半搜索,二分。

物品分两堆,$[1,k/2]$一起处理,$[k/2+1,k]$一起处理。每一堆暴力处理出$100$万种选择的可能,然后枚举一边,二分另一边即可。

#include <bits/stdc++.h>
using namespace std; int k;
long long m; long long v[10][200];
int a[10];
long long p[2][1100000];
int sz0, sz1; void dfs0(int x, long long y) {
if(x == k / 2 + 1) {
p[0][sz0 ++] = y;
return;
}
for(int i = 0; i <= a[x]; i ++) {
dfs0(x + 1, y + v[x][i]);
}
} void dfs1(int x, long long y) {
if(x == k + 1) {
p[1][sz1 ++] = y;
return;
}
for(int i = 0; i <= a[x]; i ++) {
dfs1(x + 1, y + v[x][i]);
}
} int main() {
while(~scanf("%d%lld", &k, &m)) {
for(int i = 1; i <= k; i ++) {
scanf("%d", &a[i]);
for(int j = 1; j <= a[i]; j ++) {
scanf("%lld", &v[i][j]);
}
}
if(k == 1) {
int sum = 0;
for(int j = 1; j <= a[1]; j ++) {
if(v[1][j] > m) sum ++;
}
printf("%d\n", sum);
continue;
}
sz0 = sz1 = 0;
dfs0(1, 0);
dfs1(k / 2 + 1, 0); sort(p[1], p[1] + sz1); long long ans = 0;
for(int i = 0; i < sz0; i ++) {
int L = 0, R = sz1 - 1, pos = sz1;
while(L <= R) {
int mid = (L + R) / 2;
if(p[0][i] + p[1][mid] > m) pos = mid, R = mid - 1;
else L = mid + 1;
}
ans = ans + (sz1 - pos);
}
printf("%lld\n", ans); }
return 0;
}

  

长沙理工大学第十二届ACM大赛-重现赛 L - 选择困难症的更多相关文章

  1. 长沙理工大学第十二届ACM大赛-重现赛 J 武藏牌牛奶促销

    链接:https://ac.nowcoder.com/acm/contest/1/J 来源:牛客网 武藏牌牛奶促销 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他 ...

  2. 长沙理工大学第十二届ACM大赛-重现赛I 主持人的烦恼 (sort)

    链接:https://ac.nowcoder.com/acm/contest/1/I 来源:牛客网 主持人的烦恼 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  3. 长沙理工大学第十二届ACM大赛-重现赛 D 小M和天平 (01背包)

    链接:https://ac.nowcoder.com/acm/contest/1/D 来源:牛客网 小M和天平 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言 ...

  4. 长沙理工大学第十二届ACM大赛-重现赛C 安卓图案解锁 (模拟)

    链接:https://ac.nowcoder.com/acm/contest/1/C来源:牛客网 安卓图案解锁 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言 ...

  5. 长沙理工大学第十二届ACM大赛-重现赛 B 日历中的数字 (实现)

    链接:https://ac.nowcoder.com/acm/contest/1/B来源:牛客网 全屏查看题目   时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他 ...

  6. 长沙理工大学第十二届ACM大赛-重现赛 G - 跑路ing

    题目描述 vigoss18 辞职成功终于逃出了公司,但是没过太久,公司就发现vigoss18 的所作所为,于是派人来把他抓 回去. vigoss18 必须一直跑路,躲避公司的围捕.可以抽象的看成一个有 ...

  7. 长沙理工大学第十二届ACM大赛-重现赛 K - 大家一起来数二叉树吧

    题目描述 某一天,Zzq正在上数据结构课.老师在讲台上面讲着二叉树,zzq在下面发着呆. 突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗? 对于第一组样例的解 ...

  8. 长沙理工大学第十二届ACM大赛-重现赛

    年轮广场 时间限制:1秒 空间限制:131072K 题目描述 在云塘校区,有一个很适合晒太阳的地方————年轮广场 年轮广场可以看成n个位置顺时针围成一个环. 这天,天气非常好,Mathon带着他的小 ...

  9. 长沙理工大学第十二届ACM大赛-重现赛 大家一起来数二叉树吧 (组合计数)

    大意: 求n结点m叶子二叉树个数. 直接暴力, $dp[i][j][k][l]$表示第$i$层共$j$节点, 共$k$叶子, 第$i$层有$l$个叶子的方案数, 然后暴力枚举第$i$层出度为1和出度为 ...

随机推荐

  1. (转) 使用vivado创建工程 1

    此文全文转自:http://svenand.blogdrive.com/archive/169.html#.WaUV9IiGNPY  ,非常感谢! 本人在vivado 2015.4版本测试! When ...

  2. Google guava 中的Monitor

    synchronized 自从Java提供了多线程编程,我们经常需要处理这样的情况:在特定的时间,我们需要限制访问,确保只有一个线程访问我们的代码.Java提供了同步关键字synchronized来实 ...

  3. 使用CSS3+JQuery打造自定义视频播放器

    简介 HTML5的<video>标签已经被目前大多数主流浏览器所支持,包括还未正式发布的IE9也声明将支持<video>标签,利用浏览器原生特性嵌入视频有很多好处,所以很多开发 ...

  4. three.js_camera相机

    https://blog.csdn.net/yangnianbing110/article/details/51275927 文章地址

  5. Python3 反射及常用的方法

    反射就是通过字符串映射或修改程序运行时的状态.属性.方法 有四个常用方法: hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法 getattr(obj,na ...

  6. [003] largest_subarray_with_equal_1&0

    [Description] Given an array with only '1' and '0', find a largest length sub-array which contains e ...

  7. offset宏的讲解【转】

    转自:http://blog.csdn.net/tigerjibo/article/details/8299584 1.offset宏讲解 #define offsetof(TYPE, MEMBER) ...

  8. Elasticsearch5.0 安装问题集锦【转】

    转自 Elasticsearch5.0 安装问题集锦 - 代码&优雅着&生活 - 博客园http://www.cnblogs.com/sloveling/p/elasticsearch ...

  9. 设计模式之笔记--享元模式(Flyweight)

    享元模式(Flyweight) 定义 享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象. 类图 描述 Flyweight:抽象享元类,是所有的具体享元类的基类,为子类规定出需要实 ...

  10. [转载]Firefox插件(plugins)开发实用指南

    转自: http://huandu.me/2010/02/11/595/ Firefox插件可实现强大功能,但其中麻烦事情不少.写这个实用指南首先是为了方便自己记忆,免得以后再次栽倒一些坑里面,如果能 ...