CF1185F Two Pizzas 状压
你发现 pizza 种类数不会很多,状压一下就可以了
code:
#include <bits/stdc++.h>
#define M 11
#define N 100005
#define LL long long
using namespace std;
int n,m,cnt;
int v[1<<M],tmp[M],id[1<<M],a1[1<<M],a2[1<<M];
LL val[1<<M];
LL mer[1<<M];
int tot[1<<M];
struct node
{
LL x;
int id;
node(LL x=0,int id=0):x(x),id(id){}
};
vector<node>gg[1<<M];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<=10;++i) tmp[i]=1<<i;
for(i=1;i<=n;++i)
{
int t,x,re=0;
scanf("%d",&t);
for(j=1;j<=t;++j) scanf("%d",&x),re|=tmp[x];
++v[re];
}
for(i=1;i<=m;++i)
{
LL x;
scanf("%lld",&x);
int t,o,re=0;
scanf("%d",&t);
for(j=1;j<=t;++j) scanf("%d",&o),re|=tmp[o];
if(!val[re]||val[re]>x) val[re]=x, id[re]=i;
gg[re].push_back(node(x,i));
}
for(i=1;i<tmp[10];++i) sort(gg[i].begin(),gg[i].end(),cmp);
for(i=1;i<tmp[10];++i)
{
if(!val[i]) continue;
if(gg[i].size()>=2)
{
if(!mer[i]||mer[i]>gg[i][0].x+gg[i][1].x)
mer[i]=gg[i][0].x+gg[i][1].x,a1[i]=gg[i][0].id, a2[i]=gg[i][1].id;
}
for(j=i+1;j<=tmp[10];++j)
{
if(!val[j]) continue;
if(!mer[i|j]||(mer[i|j]>val[i]+val[j]))
{
mer[i|j]=val[i]+val[j];
a1[i|j]=id[i];
a2[i|j]=id[j];
}
}
}
int mx=0;
for(i=1;i<=tmp[10];++i)
{
if(!mer[i]) continue;
tot[i]=0; // 枚举结合完的
for(j=1;j<=tmp[10];++j) { if((i&j)==j) tot[i]+=v[j]; }
if(!mx||(tot[i]>tot[mx])||(tot[i]==tot[mx]&&mer[i]<mer[mx])) mx=i;
}
// printf("%lld %d\n",mer[mx],tot[mx]);
printf("%d %d\n",a1[mx],a2[mx]);
return 0;
}
CF1185F Two Pizzas 状压的更多相关文章
- CF1185F Two Pizzas
CF1185F Two Pizzas 洛谷评测传送门 题目描述 A company of nn friends wants to order exactly two pizzas. It is kno ...
- TZOJ 2289 Help Bob(状压DP)
描述 Bob loves Pizza but is always out of money. One day he reads in the newspapers that his favorite ...
- NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
我只能说,珍爱生命,远离卡常数的题...感谢陈老师和蔡神,没有他们,,,我调一个星期都弄不出来,,,, 哈罗哈的大披萨 [淡蓝] 时间限制(普通/Java) : 1000 MS/ 3000 MS ...
- POJ3311 Hie with the Pie 【状压dp/TSP问题】
题目链接:http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total ...
- <状压DP>solution-POJ3311_Hie with the Pie
Hie with the Pie Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- 【BZOJ-4197】寿司晚宴 状压DP
4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 694 Solved: 440[Submit][Status] ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
随机推荐
- Crazy Binary String(前缀和)(2019牛客暑期多校训练营(第三场))
示例: 输入: 801001001 输出:4 6 题意:一段长度为n且只有 ‘0’ 和 ‘1’ 的字符串,求子串中 ‘0’ 和 ‘1’ 数目相等和子序列中 ‘0’ 和 ‘1’ 数目相等的最大长度. 思 ...
- docker 入坑2
上一节我们安装好了docker,那么这节我们讲一下docker基本命令使用 查看版本 $ sudo docker --version 返回:Docker version 18.09.0, build ...
- ② Python3.0 运算符
Python3.0 语言支持的运算符有: 算术运算符.比较(关系)运算符.赋值运算符.逻辑运算符.位运算符.成员运算符.身份运算符.运算符优先级 一.算术运算符 常见的算术运算符有+,-,*,/,%, ...
- ubuntu ufw 配置
ubuntu ufw 配置 Ubuntu 18.04 LTS 系统中已经默认附带了 UFW 工具,如果您的系统中没有安装,可以在「终端」中执行如下命令进行安装: 1 sudo apt install ...
- 【阿里云开发】- 安装JDK
1.阿里云轻量服务器入口 https://swas.console.aliyun.com/?spm=5176.2020520001.1011.2.29ff4bd3P4AEDc#/servers 2.使 ...
- 【转载】 C#中List集合使用First()方法获取第一个元素
在C#的List集合操作过程中,如果要获取List集合中的第一个元素对象,则一般会先通过获取到list[0]这种方式来获取第一个元素.其实在List集合中提供了获取最后一个元素的First()方法,调 ...
- python 简单工厂模式
abc 是抽象类模块abc.ABC 是继承抽象类 也可直接继承 (metaclass=ABCMeta)abc.abstractmethod 是定义抽象方法 简单工厂模式:通过接口创建对象,但不会暴露 ...
- 在js中把json中的 key去掉双引号的方法
方法一: //数据格式是这样的: var data = '[{"id":30348079,"name":"表1","score&q ...
- 如何恢复SVN被删除文件、文件夹
转自:https://blog.csdn.net/chuangxin/article/details/81226657 一.摘要本文讲述在客户端(如:Tortoise SVN,开发工具IDE SVN插 ...
- python基础-生成器
生成器 概念:但凡在函数内部定义了一个yield,调用函数时,函数体代码不会执行,会返回一个结果,该结果就是生成器.本质上是迭代器,一个自定义的迭代器. # python内获取迭代器的方式 def i ...