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(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...
随机推荐
- 使用$test$plusargs提高RTL验收速度
0 前言 这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testb ...
- 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题
三.请简要地证明:在规模为 n 的子数组上,PARTITION 的时间复杂度为 Θ(n). 文心一言: 首先,我们需要明确PARTITION函数的具体定义.PARTITION函数通常用于快速排序算法中 ...
- [FreeSWITCH]简单配置fifo呼入队列
拨号计划 <?xml version="1.0"?> <include> <context name="inboundcall"& ...
- 记一次 .NET某报关系统 非托管泄露分析
一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序内存会出现暴涨,让我看下是怎么事情?而且还告诉我是在 Linux 环境下,说实话在Linux上分析.NET程序难度会很大,难度大的原因在于Li ...
- Elasticsearch 保姆级入门篇
Elasticsearch 是一个分布式的.面向生产规模工作负载优化的搜索引擎. Kibana 可以将 Elasticsearch 中的数据转化为直观的图表.图形和仪表盘. 这篇文章,您将学习本地安装 ...
- elasticsearch中的数据类型search_as_you_type及查看底层Lucene索引
search_as_you_type字段类型用于自动补全,当用户输入搜索关键词的时候,还没输完就可以提示用户相关内容.as_you_type应该是说当你打字的时候.它会给索引里的这个类型的字段添加一些 ...
- vlak
2023-7-14 题目 luogu题目传送门 题目描述 Nina 和 Emilija 正在玩一个特殊的游戏.这个游戏是在一张最开始为空白的纸上进行的.在每一个人的行动回合内,这个人会在这张纸上当前的 ...
- What is TLS ?
TLS intrduction TLS是一种保障数据传输安全的一种技术(方案),它在传输层工作. 想知道TLS和SSL的关系,先看看他们的历史: 人们遇到数据传输安全问题 1994 SSL 1.0 1 ...
- .NET中测量多线程基准性能
多线程基准性能是用来衡量计算机系统或应用程序在多线程环境下的执行能力和性能的度量指标.它通常用来评估系统在并行处理任务时的效率和性能.测量中通常创建多个线程并在这些线程上执行并发任务,以模拟实际应用程 ...
- 【krpano】KRPano自动缩略图分组插件
该插件可以展示场景缩略图,并支持场景分组. 下载地址:http://pan.baidu.com/s/1dFj7v0l 使用说明: 插件共有两个文件,auto_thumbs.xml和tooltip.xm ...