[SDOI2008]烧水问题,洛谷之提高历练地,神奇的解法

本文通过分析烧水问题,提出了一种高效的热量利用方案。该方案不仅考虑了单杯水的热量需求,还通过传递剩余热量的方式实现了多杯水间的热量优化分配。文章最后给出了具体的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正题

      第二题:烧水问题

      相信你们的主要问题是没有理解好题目。

      题目说的是“每一杯水被烧过一次即可"。所以说,一杯水烧完以后的最大价值,是给别人热量。

      那么我们就想到了尽量给别人热量的方法。

      一杯水:420000J

      两杯水:210000J(将第一杯水烧开)+105000J(用第一杯水将第二杯水升高50度,然后再用105000J升到100度)

      三杯水:140000J(将第一杯水烧开)+70000J(用第一杯水加热到50度再升高)+35000J(用第一杯水升高25度,用第二杯水再升高50度(到75度),再加热)。

      。。。。同理

      我们就发现了他的规律。假如一杯水所需热量为x J.那么n杯水共需x + x/2 + x/4 + x/8+ ... + x/2^(n-1)

      用一个东西累加即可。

#include<iostream>
#include<cstdio>
using namespace std;

double t[50001];

int main()
{
    int n;
    double res,now;
    cin>>n;
    now=420000.00/n;
    for(int i=1;i<=n;i++)
	{
        res+=now;
        now*=(1-0.5/i);
    }    
    printf("%.2lf\n", res);
    return 0;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值