洛谷1984 [SDOI2008]烧水问题
来源:互联网 发布:js date格式化 编辑:程序博客网 时间:2024/04/28 16:09
标签:数学
题目描述
把总质量为1kg的水分装在n个杯子里,每杯水的质量均为(1/n)kg,初始温度均为0℃。现需要把每一杯水都烧开。我们可以对任意一杯水进行加热。把一杯水的温度升高t℃所需的能量为(4200*t/n)J,其中,“J”是能量单位“焦耳”。如果一旦某杯水的温度达到100℃,那么这杯水的温度就不能再继续升高,此时我们认为这杯水已经被烧开。显然地,如果直接把水一杯一杯地烧开,所需的总能量为(4200*100)J。
在烧水的过程中,我们随时可以在两杯温度不同的水之间进行热传递操作。热量只能从温度较高的那杯水传递到温度较低的那杯水。由于两杯水的质量相同,所以进行热传递操作之后,原来温度较高的那杯水所降低的温度总是等于原来温度较低的那杯水所升高的温度。
一旦两杯水的温度相同,热传递立刻停止。
为了把问题简化,我们假设:
1、没有进行加热或热传递操作时,水的温度不会变化。
2、加热时所花费的能量全部被水吸收,杯子不吸收能量。
3、热传递总是隔着杯子进行,n杯水永远不会互相混合。
4、热传递符合能量守恒,而且没有任何的热量损耗。
在这个问题里,只要求把每杯水都至少烧开一遍就可以了,而不要求最终每杯水的温度都是100℃。我们可以用如下操作把两杯水烧开:先把一杯水加热到100℃,花费能量(4200*100/2)J,然后两杯水进行热传递,直到它们的温度都变成50℃为止,最后把原来没有加热到100℃的那杯水加热到100℃,花费能量(4200*50/2)J,此时两杯水都被烧开过了,当前温度一杯100℃,一杯50℃,花费的总能量为(4200*75)J,比直接烧开所需的(4200*100)J少花费了25%的能量。
你的任务是设计一个最佳的操作方案使得n杯水都至少被烧开一遍所需的总能量最少。
输入输出格式
输入格式:输入文件只有一个数n。
输出n杯水都至少被烧开一遍所需的最少的总能量,单位为J,四舍五入到小数点后两位。
code
#include<bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=a;i>=b;i--)#define LL long long#define mem(x,num) memset(x,num,sizeof x)using namespace std;//f(n+1)/f(n)=1-1/2ndouble ans,t;int n;int main(){ cin>>n; ans=t=420000.00/n; rep(i,1,n-1){ t=t*(1-0.5/i); ans+=t; } printf("%.2lf",ans); return 0;}
- 洛谷1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008]烧水问题
- 洛谷 P1984 [SDOI2008] 烧水问题
- 【洛谷 P1984】[SDOI2008]烧水问题
- 洛谷P1984 [SDOI2008]烧水问题
- P1984 [SDOI2008]烧水问题
- P1984 [SDOI2008]烧水问题
- [P1984][SDOI2008]烧水问题
- P1984_[SDOI2008]烧水问题
- 洛谷 1984 烧水问题
- 洛谷1984烧水问题(脑洞)
- 洛谷P1984 烧水问题
- 烧水问题
- 洛谷 神奇的解法专题 烧水问题
- 一名优秀的web前端工程师需要做到哪几点?
- 设计模式【装饰模式Decorator Pattern】
- JavaEE——CSS字体样式
- activexObject实现文件夹选择 有局限性
- 最小二乘法分析
- 洛谷1984 [SDOI2008]烧水问题
- 我所遇-前端笔试题总结
- XListView的下滑刷新上拉加载
- 国庆拥堵现象说明了什么?
- html知识总结
- Android Studio NDK开发篇一
- 使用C++读取UTF8及GBK系列的文本方法及原理
- Windows和Unix的Unicode实现的差别
- git_彻底的回退到指定版本,远程仓库也需要彻底回退,不留痕迹