选择困难症[NC13594]折半搜索+二分

题目描述

小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个的喜欢值是多少。

输出描述:

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

思路

考虑暴力枚举,共有k类,每类最多100个即有101种选择,那么总共枚举最多 10 1 6 101^6 1016,显然太大了,那么可以考虑折半搜索,那么两部分的次数最多均为 10 1 3 101^3 1013,显然是在可接受的范围内,之后再二分获得每个类别的答案。

代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e7+5;
typedef long long ll;
ll a[N],b[N];
int cnt1,cnt2;
ll k,m;
int cnt[7];
ll v[7][105];void dfs(ll a[],int &num , int cur,int end ,ll sum)
{if(cur == end + 1){a[++num] = sum;return ;}for(int i = 0 ; i <= cnt[cur] ; i ++)dfs(a,num,cur+1,end,sum + v[cur][i]);
}int main()
{while(~scanf("%lld%lld",&k,&m)){for(int i = 1 ; i <= k ; i ++){scanf("%d",&cnt[i]);for(int j = 0 ; j < cnt[i] ; j ++)scanf("%lld",&v[i][j]);v[i][cnt[i]] = 0;}int mid = k >> 1;cnt1 = cnt2 = 0;dfs(a,cnt1,1,mid,0);dfs(b,cnt2,mid+1,k,0);sort(b+1,b+cnt2+1);ll ans = 0;for(int i = 1 ; i <= cnt1 ; i ++){int pos = upper_bound(b+1,b+cnt2+1,m - a[i]) - b;if(pos == cnt2 + 1)continue;ans += cnt2 - pos + 1;}printf("%lld\n",ans);}return 0;
}

选择困难症[NC13594]折半搜索+二分相关推荐

  1. 2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]

    选择困难症 发布时间: 2017年7月4日 12:44   最后更新: 2017年7月4日 12:45   时间限制: 5000ms   内存限制: 128M 描述 GG有严重的选择困难症. 早上起床 ...

  2. 长沙理工大学第十二届ACM大赛-重现赛 L - 选择困难症

    题目描述 小L有严重的选择困难症. 早上起床后,需要花很长时间决定今天穿什么出门. 假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度. 小L ...

  3. 数学建模算法:Dijkstra(迪杰斯特拉)算法解决你的选择困难症

    是否曾经深陷选择困难症,面对一堆选择而无从是从? 一文学会Dijkstra算法解决你的选择困难症 我们可以把问题实例化为从图中1到5,怎么走是最短路径? 一:Dijkstra算法概述. 二:Dijks ...

  4. 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症

    伊瓢 茕茕 发自 凹非寺 量子位 报道 | 公众号 QbitAI 报道了那么多发布会,依然无法选出要换的第一部5G手机. 这不,随着华为P40系列发布,目前国产四大金刚HMOV,都推出了年度5G旗舰. ...

  5. 解决选择困难症,有哪些常用的营销手段?

    文丨公关之家 作者:不承权舆 生活中总是面临各种各样大大小小的选择,不管是重大抉择还是一些无关紧要的事情,大多数人会陷入"选哪一个"的困境,由于存在这种普遍的共鸣个或是为了调侃这一 ...

  6. 专治选择困难症——bandit算法

    选择是一个技术活 著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要. 我们会遇到很多选择的场景.上哪个大学,学什么专业,去哪家公司,中午吃什么,等等.这些事情,都让选择困难症的我们头很大.那么,有办法能 ...

  7. Js实现轮盘抽奖功能,一招帮你解决选择困难症

    不知道今天自己该吃什么,一招帮你解决选择困难症. 通过html+css+js实现一个轮盘抽奖功能.我们可以将平时吃的饭菜输入到代码中,每到纠结的时候只需点开抽一次就可以了. 实现步骤 html代码: ...

  8. 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色!

    目录 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色! 一.前言(项目链接在最后) 二.实现效果 三.ace2p模型介绍 四.引入相关库 五.安装新版本Hub 六.配置参数 七.分割 ...

  9. 高速PCB(五) 信号层覆铜选择困难症

    1.信号层覆铜选择困难症 我们经常在教科书上或者IC原厂的PCB设计指南里看到,在layout的最后,我们应当对PCB的外层进行铺铜处理,即用良好接地的铜箔铺满PCB空白区域. 在PCB外层覆铜的好处 ...

最新文章

  1. 【转载】升级OpenSSL修复高危漏洞Heartbleed
  2. H3C设备之RIP v2认证
  3. To B 企业在营销、产品、服务端的破局之道
  4. python中序列和列表区别细菌真菌病毒_python是哪种动物_动物的分类
  5. python将变量i的值增加1_Python中变量自增、i+=x与i=i+x、is与==
  6. matlab聚类算法,科学网—matlab-聚类算法笔记 - 孙月芳的博文
  7. c#获取对象的唯一标识_DDD领域驱动设计实战 - 创建实体身份标识的常用策略
  8. 解决Mybatis的配置文件标签属性自动提示
  9. ITPUB那些事儿——写在pub十周年之际
  10. 在Windows上搭建Go开发环境
  11. vue 数据劫持 响应式原理 Observer Dep Watcher
  12. javascript语言
  13. 作为移动开发者,你应该了解Baas(后端即服务)
  14. linux 卸载pppoe,列“State”不属于表 。
  15. 文件同步备份工具—Second Copy
  16. 我的游戏测试面试过程
  17. 『软件工程5』详解软件项目管理之软件的度量
  18. Mybatis时区问题
  19. 2022电赛省一-小车跟随行驶系统(C题)
  20. DQN 强化学习 (Reinforcement Learning)

热门文章

  1. 做人,别伤人,别骗人,别负人
  2. 江哥带你玩转C语言 | 09 - C语言进制和位运算
  3. GOODIX TOUCH驱动移植
  4. Nacos2.2使用PostgreSQL数据源插件存储数据手把手教程
  5. 计算机绘画社团活动教案,创意电脑绘画社团_
  6. 计算机网络平台建设,计算机网络课程信息化教学平台建设原稿
  7. 未明学院学员报告:做了微博数据分析后,我发现现在最火的明星原来是……
  8. 充分利用闲置宽带容器魔方部署
  9. ABAP中生成GUID、UUID的方法汇总
  10. 【Linux Mint】VMware虚拟机上安装Linux并配置并下载pycharm