[loj3342]制作菜品

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 505
4 set<pair<int,int> >s;
5 int t,n,m,k,d[N],vis[N];
6 bitset<N*N*20>f[N];
7 void work(int m){
8 for(int i=1;i<=m;i++){
9 int x=(*s.begin()).second;
10 s.erase(s.begin());
11 if (d[x]>=k){
12 printf("%d %d",x,k);
13 d[x]-=k;
14 if (d[x])s.insert(make_pair(d[x],x));
15 }
16 else{
17 int y=(*(--s.end())).second;
18 s.erase(--s.end());
19 printf("%d %d %d %d",x,d[x],y,k-d[x]);
20 d[y]-=k-d[x];
21 if (d[y])s.insert(make_pair(d[y],y));
22 d[x]=0;
23 }
24 if (i!=m)printf("\n");
25 }
26 }
27 int main(){
28 freopen("dish.in","r",stdin);
29 freopen("dish.out","w",stdout);
30 scanf("%d",&t);
31 bool flag=0;
32 while (t--){
33 if (flag)printf("\n");
34 flag=1;
35 scanf("%d%d%d",&n,&m,&k);
36 for(int i=1;i<=n;i++)scanf("%d",&d[i]);
37 if (n-1<=m){
38 for(int i=1;i<=n;i++)s.insert(make_pair(d[i],i));
39 work(m);
40 continue;
41 }
42 memset(vis,0,sizeof(vis));
43 for(int i=0;i<=n;i++)f[i].reset();
44 f[0][n*k]=1;
45 bool flagg=0;
46 for(int i=1;i<=n;i++){
47 f[i]=f[i-1];
48 if (d[i]>=k)f[i]|=(f[i-1]<<d[i]-k);
49 else f[i]|=(f[i-1]>>k-d[i]);
50 if (f[i][(n-1)*k]){
51 flagg=1;
52 for(int j=i,t=(n-1)*k;j;j--)
53 if (f[j-1][t-(d[j]-k)]){
54 vis[j]=1;
55 t-=d[j]-k;
56 }
57 for(int j=1;j<=n;j++)
58 if (vis[j])s.insert(make_pair(d[j],j));
59 work(s.size()-1);
60 printf("\n");
61 for(int j=1;j<=n;j++)
62 if (!vis[j])s.insert(make_pair(d[j],j));
63 work(s.size()-1);
64 break;
65 }
66 }
67 if (!flagg)printf("-1");
68 }
69 return 0;
70 }
[loj3342]制作菜品的更多相关文章
- 洛谷 P6775 - [NOI2020] 制作菜品(找性质+bitset 优化 dp)
题面传送门 好久没写过题解了,感觉几天没写手都生疏了 首先这种题目直接做肯定是有些困难的,不过注意到题目中有个奇奇怪怪的条件叫 \(m\ge n-2\),我们不妨从此入手解决这道题. 我们先来探究 \ ...
- P6775-[NOI2020]制作菜品【贪心,dp】
正题 题目链接:https://www.luogu.com.cn/problem/P6775 题目大意 \(n\)种原材料,第\(i\)个有\(d_i\)个,\(m\)道菜品都需要\(k\)个原料而且 ...
- [NOI2020] 制作菜品
看懂题目是生产第一要素. 考虑\(m = n - 1\)则必定有解.我们每次选择最小的和最大的拼在一起即可. 当\(m\)大于\(n\),那么我们只要每次选择最大的给他消掉即可. \(m = n - ...
- 用POLARDB构建客到智能餐饮系统实践
在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中.智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点.本文中果仁软件联合创始人& ...
- Activity 学习(二) 搭建第一个Activity流程框架
本次示例使用的IDER测试完成 测试背景 : xx饿了去饭店吃饭 需要先和服务员点餐 点完餐后服务员将菜品传递给厨师制作 制作完成后吃饱 一 :创建流程图 创建上一篇测试成功出现的BpmnFil ...
- NOI2020网上同步赛 游记
Day1 预计得分:\(32pts\)(我裂开了--) T1 美食家 表示考试的时候想到了关于矩阵快速幂的想法,甚至连分段后怎么处理都想好了,但是没有想到拆点,还有不知道怎么处理重边(这个考虑是多余的 ...
- NOI2020 同步赛划水记
因为太菜了没去现场参加 NOI 就算去了估计也只能混个Fe(雾) "两天都会各有一道签到题,争取拿到70分.剩下的题每道题打30分暴力.每天130分,就能稳拿Ag了."--ls D ...
- [HNOI 2015]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
随机推荐
- 人力节省 50%,研发效能提升 40%,阿里 Serverless 架构落地实践
作者 | 万佳 嘉宾 | 杨皓然(不瞋) 导读:云的下一波浪潮是什么?杨皓然称"是 Serverless".作为一名阿里老兵,他早在 2010 年即加入阿里云,曾深度参与阿里云飞天 ...
- web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2)
web全栈后台权限管理系统(VUE+ElementUi+nodeJs+koa2) 主要技术 前端 vue 全家桶 ElementUI 后端 Node.js Koa2 Mongoess 数据库 mong ...
- Java:创建对象小记
Java:创建对象小记 对 Java 中的创建对象的内容,做一个微不足道的小小小小记 创建对象的方式概述 使用 new 关键字:Person person = new Person(); 反射创建:使 ...
- Ajax配合后端实现Excel的导出
一.需求 在我们的日常开发中,可能经常需要遇到excel的导出,以往excel的导出服务器端都是使用的 GET 方法,但是某些情况下,服务器端只能使用 POST 方法,那么我们有没有好的方法实现exc ...
- 启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析
文/朱季谦 遇到一个很诡异的问题,我在启动多个配置相同zookeeper的Dubbo项目时,其他项目都是正常启动,唯独有一个项目在启动过程中,Dubbo注册zookeeper协议时,竟然出现了这样的异 ...
- vs2010中release模式下调试程序
debug模式调试信息全,但是速度很慢,在数据量比较大的时候非常影响调试效率,release模式速度快,但是没有调试信息.所以在编译的时候很多编译器会提供一种折中的编译方式,在release下提供调试 ...
- USB OTG原理和 ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了 电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机 ...
- AtCoder Beginner Contest 213 F题 题解
F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...
- cf13B Letter A(分类+简单计算几何,,)
题意: 给三个线段(每个线段的两个端点的坐标),问这三个线段能否组成字母A. 组成字母A的条件: 1.两个线段有公共端点. 2.这两个线段夹角小于等于90度. 3.第三个线段的两个端点分别在这两个线段 ...
- CSS学习笔记:浮动属性
目录 一.浮动流是什么 二.通过代码实例了解浮动特点 1. 搭建测试框架 2. 添加浮动 3. 浮动元素的排布 4. 给行内元素添加浮动效果 5. 子元素浮动后对父元素的影响 5.1 在父元素中添加o ...