Codeforces Round #691 (Div. 2) D - Glass Half Spilled(DP)
补下因实验漏掉的CF(还以为是晚上,没想到是下午开始)。前三题过的很顺利,到D题时想了会发现数据很小爆搜貌似能过,就以为是道水题,交了一发T了,胡乱加了点剪枝还是T。逐渐意识到事情的严重性。考虑DP,设 \(dp[i][t][p]\)为在前 \(i\)个玻璃杯中选择 \(t\)个玻璃杯时容量为 \(p\)的所能获得的最大水量, 转移方程是 \(dp[i][t][p]=max(dp[i-1][t][p]+b[i]/2.0, dp[i-1][t-1][p-a[i]]+b[i])\),最后输出时取 \(max(min(p,dp[n][k][p]))\),本以为能过,交了一发 \(MLE\),当场懵逼。算了下空间发现大概用了 \(2e8\)个 \(int\),而空间限制大约是 \(1.3e8\)个 \(int\)那样,原因是我的 \(dp\)数组是 \(double\)类型的,太坑了。。。想办法把数组变成 \(int\)类型,因为输入都是整数,所以这是可以办到的。改写下答案表达式,设 \(sum_b\)是全部水杯里的水量之和,因为 \(dp\)数组不能储存小数了,那么让 \(dp\)数组表示在前 \(i\)个玻璃杯中选择 \(t\)个玻璃杯时容量为 \(p\)的所能获得的选择的水杯的水量之和的最大值,那么最终答案就是 \(max(min(p,dp[n][k][p]+(sum\_b-dp[n][k][p])/2.0))\),即 \(max(min(p,sum\_b/2.0+dp[n][k][p]/2.0))\)
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N = 105;
int n, m;
int sum, sum_b;
int dp[N][N][N * N];
pair<int, int> pa[N];
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i) scanf("%d%d", &pa[i].first, &pa[i].second), sum += pa[i].first, sum_b += pa[i].second;
for(int i = 0; i <= n; ++i)
for(int t = 0; t <= n; ++t)
for(int p = 0; p <= sum; ++p)
dp[i][t][p] = -1e9;
dp[0][0][0] = 0;
for(int i = 1; i <= n; ++i)
for(int t = 0; t <= i; ++t)
for(int p = 0; p <= sum; ++p){
dp[i][t][p] = dp[i - 1][t][p];
if(p >= pa[i].first && t > 0) dp[i][t][p] = max(dp[i][t][p], dp[i - 1][t - 1][p - pa[i].first] + pa[i].second);
}
for(int i = 1; i <= n; ++i){
double ans = 0;
for(int t = 1; t <= sum; ++t){
ans = max(ans, min(1.0 * t, dp[n][i][t] / 2.0 + sum_b / 2.0));
}
printf("%.9lf ", ans);
}
return 0;
}
Codeforces Round #691 (Div. 2) D - Glass Half Spilled(DP)的更多相关文章
- Codeforces Round #267 (Div. 2) C. George and Job(DP)补题
Codeforces Round #267 (Div. 2) C. George and Job题目链接请点击~ The new ITone 6 has been released recently ...
- Codeforces Round #390 (Div. 2) C. Vladik and chat(dp)
http://codeforces.com/contest/754/problem/C C. Vladik and chat time limit per test 2 seconds memory ...
- Codeforces Round #605 (Div. 3) D. Remove One Element(DP)
链接: https://codeforces.com/contest/1272/problem/D 题意: You are given an array a consisting of n integ ...
- Codeforces Round #651 (Div. 2) E. Binary Subsequence Rotation(dp)
题目链接:https://codeforces.com/contest/1370/problem/E 题意 给出两个长为 $n$ 的 $01$ 串 $s$ 和 $t$,每次可以选择 $s$ 的一些下标 ...
- Codeforces Round #321 (Div. 2) D Kefa and Dishes(dp)
用spfa,和dp是一样的.转移只和最后一个吃的dish和吃了哪些有关. 把松弛改成变长.因为是DAG,所以一定没环.操作最多有84934656,514ms跑过,实际远远没这么多. 脑补过一下费用流, ...
- Codeforces Round #267 (Div. 2) C. George and Job (dp)
wa哭了,,t哭了,,还是看了题解... 8170436 2014-10-11 06:41:51 njczy2010 C - George and Jo ...
- Codeforces Round #184 (Div. 2) E. Playing with String(博弈)
题目大意 两个人轮流在一个字符串上删掉一个字符,没有字符可删的人输掉游戏 删字符的规则如下: 1. 每次从一个字符串中选取一个字符,它是一个长度至少为 3 的奇回文串的中心 2. 删掉该字符,同时,他 ...
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(分形)
E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #394 (Div. 2) C.Dasha and Password(暴力)
http://codeforces.com/contest/761/problem/C 题意:给出n个串,每个串的初始光标都位于0(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...
随机推荐
- 独奏者2 序章的wp
0x01 0ctf_2017_babyheap 2023.7.24 国防科技大学 合肥 本题除了fastbin attack,最重要的是伪造fakechunk,使得存放chunk的指针有两个指向同一个 ...
- Java并发(十五)----synchronized解决共享的问题
为了避免临界区的竞态条件发生,有多种手段可以达到目的. 阻塞式的解决方案:synchronized,Lock 非阻塞式的解决方案:原子变量 此次介绍使用阻塞式的解决方案:synchronized,来解 ...
- 千万级数据的表,我把慢sql优化后性能提升30倍!
分享技术,用心生活 背景:系统中有一个统计页面加载特别慢,前端设置的40s超时时间都加载不出来数据,因为是个统计页面,基本上一猜就知道是mysql的语句有问题,遗留了很久没有解决,正好趁不忙的时候,下 ...
- RabbitMQ 如何实现延迟队列?
延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息. 延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单. 给活跃度比较低的用户间隔 N ...
- 超全技术学习资料PDF分享
技术学习资料分享,目前共20G,持续更新... Java学习资料: 大数据Hadoop: 这里不一一截图了,资源持续更新中. 关注下面公众号进行下载.
- Python ChatGPT Telegram Bot
注册 这里如何注册我就不说明了,大家自行去注册,主要是现在GPT的基本上已经备用很多了,导致了接码的价格也上涨了,而且使用token的话,其实还是很快可以用完免费的18美金: 接码:https://s ...
- Linux Ubuntu 安装Qt【安装完可以直接运行】
1.安装 Qt: 第一步:到官网http://download.qt.io/archive/qt/下载 Qt 安装包,此处本人安装的是 qt-opensource-linux-x64-5.7.0.ru ...
- Prometheus + Grafana 搭建监控系统
前言 本文主要记录下如何使用 Prometheus + Grafana 搭建对各种服务的性能监控,涵盖对 Prometheus.Grafana 的基本介绍,以及如何使用二者进行对 Linux.MySQ ...
- Solution -「洛谷 P4689」「YunoOI 2016」这是我自己的发明
Description Link. 给一个树,\(n\) 个点,有点权,初始根是 1. \(m\) 个操作,种类如下: 1 x 将树根换为 \(x\). 2 x y 给出两个点 \(x,y\),从 \ ...
- Vue 搭配 Spring MVC 创建一个 web 项目
Vue 搭配 Spring MVC 创建一个 web 项目 想要写一个登录的web应用程序.页面使用Vue,后端使用Spring MVC,最终打成war包,放在tomcat下启动. 1.创建Sprin ...