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(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...
随机推荐
- 利用选项卡提高Visual Studio 2022开发效率
设计器作为软件开发的必要工具,其效率的提高显得尤为重要.Visual Studio 2022作为一款功能强大的设计器,通过选项卡提高了工作效率,让开发者在使用过程中更加便捷. 在Visual Stud ...
- SQL Server 2022新功能概览
开始之前 本篇文章仅仅是针对SQL Server 2022新推出功能的概览,以及我个人作为用户视角对于每个功能的理解,有些功能会结合一些我的经验进行描述,实际上,SQL Server 2022在引 ...
- 蚂蚁集团混沌工程 ChaosMeta V0.5 版本发布
混沌工程 ChaosMeta 的全新版本 V0.5 现已正式发布!该版本包含了许多新特性和增强功能,为用户提供了支撑混沌工程各个阶段的平台能力,以及降低使用门槛的用户界面. ChaosMeta V0. ...
- Python基础—— 模块介绍、模块的使用、包介绍、 包的使用、软件开发目录规范
文章目录 一 模块介绍 二 模块的使用 2.1 import语句 2.2 from-import 语句 2.3 其他导入语法(as) 2.4 循环导入问题 2.5 搜索模块的路径与优先级 2.6 区分 ...
- isHex
public class Test { public static boolean isHex(String str) { boolean isHexFlg = true; int i = 0; ch ...
- Chapter 57. Multi-project Builds
http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects The po ...
- 高效数据传输:Java通过绑定快速将数据导出至Excel
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 把数据导出至 Excel 是很常见的需求,而数据的持久化 ...
- 一个树状数组求逆序对的进阶 [USACO17JAN] Promotion Counting P
题面就这样,就是在树上求一个逆序对但是我笨笨地求了对于每一个下属有几个上司能力比他低还一遍就写对了,结果发现看错题目了难得一遍过,但是没有完全过
- 使用go语言开发hive导出工具
前言 新版 hive 提供了 beeline 工具,可以执行SQL并导出数据,不过操作还是有点复杂的,团队里有些同学不会Linux的基本操作,所以我花了亿点点时间写了个交互式的命令行工具方便使用. 效 ...
- 使用 DDPO 在 TRL 中微调 Stable Diffusion 模型
引言 扩散模型 (如 DALL-E 2.Stable Diffusion) 是一类文生图模型,在生成图像 (尤其是有照片级真实感的图像) 方面取得了广泛成功.然而,这些模型生成的图像可能并不总是符合人 ...