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();
}

CF1458B Glass Half Spilled相关推荐

  1. CodeForces - 1459D Glass Half Spilled(dp)

    题目链接:点击查看 题目大意:给出 n 个水杯,每个水杯最大容量为 aia_iai​,每个水杯初始时有 bib_ibi​ 的水,两个水杯之间可以互相倒水,不过每次会损失一半水量,更具体的说,假设第 i ...

  2. Codeforces Round #691 (Div. 1)

    Codeforces Round #691 (Div. 1) 题号 题目 知识点 A Row GCD 思维 B Glass Half Spilled 背包问题 C Latin Square 思维 D ...

  3. Codeforces Round #691 (Div. 2)

    Codeforces Round #691 (Div. 2) 题号 题目 知识点 A Red-Blue Shuffle 签到 B Move and Turn (规律结论题) C Row GCD 思维 ...

  4. 【B类竞赛】第十一届山东省大学生程序设计竞赛 比赛经历

    序言 去年因为疫情没有举办省赛,导致两年的省赛隔了一年,少参加了一次,血亏. 四月ACM内部选拔赛的时候,用了2017年的山东省省赛题,用个人赛的形式打的,做出来五题,放在当年是可以拿银牌的.队友wz ...

  5. href=javascript 显示开发中_Looking Glass全息显示屏兼容全新虚幻引擎插件

    随着裸眼3D显示技术的发展,美国厂商Looking Glass Factory生产的显示屏在显示全息内容方面给人留下了深刻的印象,其生产的全息显示屏支持12个人同时以不同角度观看立体3D视频.近日,该 ...

  6. Google Glass是工具不是玩具

    上周,Google Glass正式开放体验购买申请,并在youtube上发布了"透过google眼镜感觉世界"的宣传视频,此外还发起"Glass Explorer&quo ...

  7. Windows 7 扩展玻璃效果(Aero Glass)

    Windows 7 操作系统默认具有一款玻璃效果主题(Aero Glass).如果选择了该款主题,所有的应用程序标题栏都会处于玻璃透明效果(如下图).这个功能是由Desktop Window Mana ...

  8. Codeforces 527C Glass Carving (最长连续0变形+线段树)

    Leonid wants to become a glass carver (the person who creates beautiful artworks by cutting the glas ...

  9. WPF 放大镜(Magnifying Glass)

    效果图片: 原理: 设置VistualBrush的Visual属性,利用它的Viewbox属性进行缩放. XAML代码: // Window1.xaml <Window x:Class=&quo ...

最新文章

  1. Java数据结构与算法(六) 希尔排序
  2. C# 浅拷贝与深拷贝区别 解惑篇
  3. IDL关系运算符Eq Ne Le Lt Gt Ge含义说明
  4. struts-config.xml 简述
  5. package.json mysql_package.json入门
  6. 【方便自己使用】KKT条件
  7. C++中sort排序之自定义排序cmp(入门)
  8. 如何安装 chrome 开发版
  9. java ipv6 转换_Java中Ipv4与Ipv6的转换
  10. 计算机硬盘发展现状,固态硬盘的发展现状
  11. linux:为xamp添加mysql的环境变量
  12. python PTA合集
  13. 有哪些便宜好用的虚拟主机推荐?
  14. 低功耗蓝牙迈向工业车规级,助力充电桩和电动车智能化
  15. python后台开发性能问题_《Python高性能编程》——2.14 确保性能分析成功的策略-阿里云开发者社区...
  16. 英语单词-2020.11.14
  17. 复旦Moss团队:Moss参数规模约是ChatGPT的1/10;贾跃亭再获FF执行官身份;PowerToys新版发布|极客头条
  18. ACM算法训练【贪心合集】
  19. c语言19之用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案
  20. 【Python刷题*计算客】A+B+C问题

热门文章

  1. 这才是老公的正确用法,不吃就往死里打......
  2. 史上超强的学科碰撞,有生之年必看系列!
  3. TensorFlow的这些骚操作你都知道吗?
  4. 干货|机器学习零基础?不要怕,吴恩达机器学习课程笔记2-多元线性回归
  5. nashorn js 调用 java_从nashorn(JDK 8 JavaScript引擎)调用char []输入参数调用Java函数?...
  6. SimpleXMLRPC_python xmlrpclib SimpleXMLRPCServer 模块
  7. 2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程
  8. php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
  9. leetcode213. 打家劫舍 II
  10. [SpringBoot2]容器功能_底层注解配置绑定_@Configuration@Import@Conditional@ImportResource