CF1458B Glass Half Spilled

CF1458B Glass Half Spilled

题意:

有n杯水,第i杯有容积aia_{i}ai单位,初始时装有bib_{i}bi单位的水
现在你可以进行若干次操作,每次选择一杯水的一定水量并倒到另一杯水中,但是因为这些杯子形状非常奇怪,因此每倒一次水,倒的水会有一半洒在地上.
求出对于所有整数p满足1<=p<=n1<=p<=n1<=p<=n,求出进行若干次操作后选取p个杯子能获得水单位数量的最大值

题解:

每次倒水都会有损失,那么倒水的过程肯定不能出现同样的水来回倒,这样必不优。因此我们就直接选中p个杯子,让后将其他杯子里的水都倒进来。设选出的k个杯子的a值和为A且b值和为B,所有杯子的b值和为sumb。可以得到答案min{A,(sumb-B) * 0.5+B}=min{A,sumb * 0.5+B * 0.5}
现在我们就要求出对于每个A所对应的尽可能大的B(因为A是给出的,B不好求)
我们把A看作容积,把B看作价值,这不就是01背包,但本题A的容积不是固定的
A表示容积,而最多就100个杯子,每个杯子容积最大是100,也就是说A最大才10000,所以我们完全可以直接枚举容积
因为题目问k个杯子的情况,所以我们还需要一维来记录所选杯子数量
设dp[i][j]][k]:前i个杯子选了j个,且容积为k的最大价值(最大盛水容量)
我们可以通过滚动数组优化第一维
时间复杂度为O(n4)O(n^4)O(n4)

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=300;
struct node{int a,b;
}w[maxn];
int dp[102][10020];
int main()
{//rd_test();int n;read(n);int sum=0;for(int i=1;i<=n;i++){cin>>w[i].a>>w[i].b;sum+=w[i].b;}memset(dp,-INF_int,sizeof dp);dp[0][0]=0;for(int i=1;i<=n;i++){for(int j=i;j>=1;j--){for(int k=10000;k>=w[i].a;k--){dp[j][k]=max(dp[j][k],dp[j-1][k-w[i].a]+w[i].b);}}}for(int i=1;i<=n;i++){double ans=0;for(int k=0;k<=10000;k++){ans=max(ans,1.0*min(1.0*k,0.5*sum+0.5*dp[i][k]));}printf("%.9lf ",ans);
//		cout<<ans<<endl;}return 0;//Time_test();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019 微软Build大会预告:值得开发者期待的是哪些?

北京时间 5 月 2 日上午 10:00&#xff08;太平洋时间 5 月 1 日晚 19:00&#xff09;&#xff0c;微软通信部门副总裁 Frank Shaw 通过网络提前预告了即将于两天后在美国西雅图召开的 2019 年微软 Build 大会的重点发布与相关信息。InfoQ 记者对本次提前发布做了简要摘录&…

线性时间选择--用于解决第k大(小)元素问题(未补)

线性时间选择–用于解决第k大(小)元素问题

使用高性能Pipelines构建.NET通讯程序

.NET Standard支持一组新的API&#xff0c;System.Span, System.Memory&#xff0c;还有System.IO.Pipelines。这几个新的API极大了提升了.NET程序的效能&#xff0c;将来.NET很多基础API都会使用它们进行重写。Pipelines旨在解决.NET编写Socket通信程序时的很多困难&#xff0…

全球开发者的年度盛宴:微软全球开发者大会 Build 2019邀您一同加入

一年一度的微软全球开发者大会&#xff08;Build&#xff09;将于5月6日至8日在美国西雅图举办。本届大会将围绕全球当下的热门技术展开&#xff0c;包括人工智能、机器学习、容器、DevOps、物联网、混合现实以及Power Platforms等&#xff1b;微软热爱开发者、重视开发者&…

Codeforces Round #688 (Div. 2)

Codeforces Round #688 (Div. 2) 题号题目知识点-ACancel the Trains签到(题解)BSuffix Operations思维CTriangles思维(略)DCheckpointsEDog SnacksFEven Harder

Oracle杀死Java EE:名正言顺转到.NET Core

Eclipse 基金会执行董事 Mike Milinkovich 昨日在博客发表了 Oracle 与 Eclipse 基金会之间关于 Java 商标谈判的结果 —— 双方的谈判最后以失败告终&#xff0c;Oracle 拒绝出让 Java 商标。Mike 在博客中还提及了 Eclipse 基金会和 Oracle 之间关于 Jakarta EE 的协议、Java…

cf1453B. Suffix Operations

cf1453B. Suffix Operations 题意&#xff1a; 给你一个整数序列&#xff0c;其中有n个元素。你需要对这个序列进行操作。 1 在所有操作开始前&#xff0c;你可以选择一个数&#xff0c;并修改他的值&#xff0c;这个值你可以自己定。本操作无花费。 2 选择一个下标i&#…

程序员修神之路--redis做分布式锁可能不那么简单

点击上方“蓝字”带你去看小星星菜菜哥&#xff0c;复联四上映了&#xff0c;要不要一起去看看&#xff1f;又想骗我电影票&#xff0c;对不对&#xff1f;呵呵&#xff0c;想去看了叫我呀看来你工作不饱和呀哪有&#xff0c;这两天我刚基于redis写了一个分布式锁&#xff0c;很…

CF1548A Web of Lies

CF1548A Web of Lies 题意&#xff1a; 题解&#xff1a; 第一感觉是先建边然后跑dfs&#xff0c;但是看数据范围肯定不对&#xff0c;现在我们开始考虑其中的性质 对于第三个操作&#xff0c;我们是要将所有>2的连通块进行判断的&#xff0c;我们考虑对于编号为x的点&…

Abp CLI 上线

Abp vNext CLI 工具随着0.17.0版本的发布已经上线.Abp中文网第一时间制作 Cn.Abp.Cli 工具. 目前提供下载加速, 后续Abp中文网CLI将会提供更多本土化功能, 并随时与官方CLI代码同步.源码(查看原文): https://github.com/cnAbp/abp-cli原文地址&#xff1a;https://mp.weixin.qq…

如何正确地生成一个随机数

参考文章 笔记 | 如何正确地生成一个随机数 CF曾提到&#xff1a;Don’t use rand(): a guide to random number generators in C 文章总结&#xff1a; 1 .rand()的随机范围太小了&#xff0c;在某些平台下&#xff08;例如 Windows&#xff09;RAND_MAX 只有 32768。如果需要…

一篇短文带您了解一下EasyCaching

前言从2017年11月11号在Github创建EasyCaching这个仓库&#xff0c;到现在也已经将近一年半的时间了&#xff0c;基本都是在下班之后和假期在完善这个项目。由于EasyCaching目前只有英文的文档托管在Read the Docs上面&#xff0c;当初选的MkDocs现在还不支持多语言&#xff0c…

[开源]OSharpNS - .net core 快速开发框架 - 简介

OSharpNS全称OSharp Framework with .NetStandard2.0&#xff0c;是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK&#xff08;当前是.NET Core 2.2&#xff09;&#xff0c;对 AspNetCore 的配置、依赖注入、日志、缓存、实体…

Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!)

Ozon Tech Challenge 2020 (Div.1 Div.2, Rated, T-shirts prizes!) 题号题目知识点AKuroni and the GiftsBKuroni and Simple StringsCKuroni and Impossible CalculationDKuroni and the Celebration思维EKuroni and the Score Distribution构造FKuroni and the Punishmen…

Web 版 VS Code (Visual Studio Online) 即将来临!

今天&#xff08;北京时间 2019 年 5 月 7 日&#xff09;&#xff0c;在微软Build 2019开发者大会上&#xff0c;微软宣布了 Web 版本的 VS Code - Visual Studio Online。相信读者们对Web 版 VS Code 期待已久了。对 VS Code 熟悉的朋友应该知道&#xff0c;VS Code 是基于 E…

CF1305D Kuroni and the Celebration

CF1305D Kuroni and the Celebration 题意&#xff1a; 给你一棵有 n 个节点的树。对于每次询问&#xff0c;提交两个点&#xff0c;评测机会返回这两个点的 LCA。求树根。 询问格式为 ? u v&#xff0c;此时评测机会返回 u 和 v 的 LCA。 提交格式为 ! x&#xff0c;表示…

CF1305F Kuroni and the Punishment

CF1305F Kuroni and the Punishment 题意&#xff1a; 给定 n 个数。每次可以选择将一个数 1 或 -1 。求至少多少次操作使得整个序列都是正数且全部元素的 gcd>1 。 n<2e5,ai<1012n<2e5,a_{i}<10^{12}n<2e5,ai​<1012 题解&#xff1a; 首先不难想到&…

2019年了,C#发展的怎么样了呢?

C# 8.0我估计大多数程序员对于C# 5.0之后的改进都没有什么太多的认知&#xff0c;的确从C# 5.0开始C#已经没什么太多东西可以从其他语言借鉴&#xff0c;Anders的重心也开始逐步倾斜到TypeScript&#xff0c;所以从5.0引入async之后C#语言发展速度开始减缓了。C#6引入了大量的语…

微软宣布新命令行工具 Windows Terminal 和 WSL2

微软在 Build 2019 已经宣布推出名为Windows Terminal的新款命令行工具 , 这款工具可以访问多种环境的中心位置。例如可以直接访问PowerShell、CMD.EXE、Windows Linux子系统等等&#xff0c;开发者使用此工具可以简化工作。这款新工具支持多选项卡同时连接多个环境或服务器&a…

CF1305E Kuroni and the Score Distribution

CF1305E Kuroni and the Score Distribution 题意&#xff1a; 题解&#xff1a; 一开始想这个题&#xff0c;想法是一开始顺着填1&#xff0c;2&#xff0c;3…然后多删少补 如果1&#xff0c;2&#xff0c;3&#xff0c;4…这样顺延的填&#xff0c;对于akka_{k}kak​k可以…