选择困难症[NC13594]折半搜索+二分
选择困难症[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]折半搜索+二分相关推荐
- 2017西安交大ACM小学期 选择困难症[折半枚举+二分查找]
选择困难症 发布时间: 2017年7月4日 12:44 最后更新: 2017年7月4日 12:45 时间限制: 5000ms 内存限制: 128M 描述 GG有严重的选择困难症. 早上起床 ...
- 长沙理工大学第十二届ACM大赛-重现赛 L - 选择困难症
题目描述 小L有严重的选择困难症. 早上起床后,需要花很长时间决定今天穿什么出门. 假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度. 小L ...
- 数学建模算法:Dijkstra(迪杰斯特拉)算法解决你的选择困难症
是否曾经深陷选择困难症,面对一堆选择而无从是从? 一文学会Dijkstra算法解决你的选择困难症 我们可以把问题实例化为从图中1到5,怎么走是最短路径? 一:Dijkstra算法概述. 二:Dijks ...
- 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症
伊瓢 茕茕 发自 凹非寺 量子位 报道 | 公众号 QbitAI 报道了那么多发布会,依然无法选出要换的第一部5G手机. 这不,随着华为P40系列发布,目前国产四大金刚HMOV,都推出了年度5G旗舰. ...
- 解决选择困难症,有哪些常用的营销手段?
文丨公关之家 作者:不承权舆 生活中总是面临各种各样大大小小的选择,不管是重大抉择还是一些无关紧要的事情,大多数人会陷入"选哪一个"的困境,由于存在这种普遍的共鸣个或是为了调侃这一 ...
- 专治选择困难症——bandit算法
选择是一个技术活 著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要. 我们会遇到很多选择的场景.上哪个大学,学什么专业,去哪家公司,中午吃什么,等等.这些事情,都让选择困难症的我们头很大.那么,有办法能 ...
- Js实现轮盘抽奖功能,一招帮你解决选择困难症
不知道今天自己该吃什么,一招帮你解决选择困难症. 通过html+css+js实现一个轮盘抽奖功能.我们可以将平时吃的饭菜输入到代码中,每到纠结的时候只需点开抽一次就可以了. 实现步骤 html代码: ...
- 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色!
目录 选择困难症患者的福音!PaddleHub帮你任意搭配你想要的颜色! 一.前言(项目链接在最后) 二.实现效果 三.ace2p模型介绍 四.引入相关库 五.安装新版本Hub 六.配置参数 七.分割 ...
- 高速PCB(五) 信号层覆铜选择困难症
1.信号层覆铜选择困难症 我们经常在教科书上或者IC原厂的PCB设计指南里看到,在layout的最后,我们应当对PCB的外层进行铺铜处理,即用良好接地的铜箔铺满PCB空白区域. 在PCB外层覆铜的好处 ...
最新文章
- 【转载】升级OpenSSL修复高危漏洞Heartbleed
- H3C设备之RIP v2认证
- To B 企业在营销、产品、服务端的破局之道
- python中序列和列表区别细菌真菌病毒_python是哪种动物_动物的分类
- python将变量i的值增加1_Python中变量自增、i+=x与i=i+x、is与==
- matlab聚类算法,科学网—matlab-聚类算法笔记 - 孙月芳的博文
- c#获取对象的唯一标识_DDD领域驱动设计实战 - 创建实体身份标识的常用策略
- 解决Mybatis的配置文件标签属性自动提示
- ITPUB那些事儿——写在pub十周年之际
- 在Windows上搭建Go开发环境
- vue 数据劫持 响应式原理 Observer Dep Watcher
- javascript语言
- 作为移动开发者,你应该了解Baas(后端即服务)
- linux 卸载pppoe,列“State”不属于表 。
- 文件同步备份工具—Second Copy
- 我的游戏测试面试过程
- 『软件工程5』详解软件项目管理之软件的度量
- Mybatis时区问题
- 2022电赛省一-小车跟随行驶系统(C题)
- DQN 强化学习 (Reinforcement Learning)