[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 ...
随机推荐
- Serverless 架构下的服务优雅下线实践
作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...
- SpringBoot-MVC自动配置原理
SpringBoot对SpringMVC做了哪些配置,如何扩展,如何定制? 文档地址 :https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/re ...
- Java(6)流程控制语句中分支结构if与switch
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201528.html 博客主页:https://www.cnblogs.com/testero ...
- Go语言核心36讲(Go语言进阶技术二)--学习笔记
08 | container包中的那些容器 我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表.那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/l ...
- vue基本指令与脚手架基本配置
脚手架(@vue/cli)创建项目启动服务 1.创建项目 vue create 项目名字 2.启动项目 进入项目根目录,运行以下命令 yarn serve 3.脚手架目录代码分析 ├── node_m ...
- 【UE4 C++ 基础知识】<15> 智能指针 TSharedPtr、UniquePtr、TWeakPtr、TSharedRef
基本概念 UE4 对 UObject 对象提供垃圾回收 UE4 对原生对象不提供垃圾回收,需要手动进行清理 方式 malloc / free new / delete new与malloc的区别在于, ...
- 写了10000条Airtest截图脚本总结出来的截图经验,赶紧收藏!
前言 今天想先给大家分享1个小白用户的Airtest从入门到放弃的故事: 小A是一个自动化的小白,在逛测试论坛的时候,偶然间发现了Airtest这个基于图像识别的UI自动化框架. 出于好奇,小A试用了 ...
- 云效Flow如何实现阿里云ECS多环境发布
一.背景 云效Flow基于标签功能实现阿里云ECS多环境发布,在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境.测试团队的测试环境.还有类生产环境和生产环境 ...
- 关于把RTL工程代码封装成IP时对define宏定义参数的处理
在把RTL工程封装成IP的时候,如果工程中的代码中含有global include中定义的参数,则vivado不支持该参数文件的封装.出现IP_FLOW 19-4646的错误代码,解决方法: 1.在用 ...
- 第12课 OpenGL 显示列表
显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表 ...