算法竞赛入门经典(第2版)习题4-10 洪水! Flooded! UVa815

这篇博客介绍了如何解决算法竞赛入门经典(第2版)中的习题4-10——UVa815洪水问题。作者提出了两种不同的解题思路,包括对所有格子按海拔排序,然后分别通过不同方法计算含水量。解法一是通过累加计算,解法二是逐个计算含水海拔并比较高度。
摘要由CSDN通过智能技术生成

此题作者建议使用多种方法解题锻炼一下

我想到了若干解法,基本大同小异,真正核心的计算海拔的算法只想出两种:

第一个解法:把所有格子按海拔顺序排序,把每一档海拔与下一档之间能够容纳的水依次累加直到大于水的总体积。

第二个解法:把所有格子按海拔顺序排序,逐个计算含水海拔,第n个格子的含水海拔=(总水量+n个格子相对于0海拔的体积)/n个格子的面积和,顺序读入后面格子海拔,如果此格高于已算出的含水海拔则终止。

解法一:

//#define LOCAL
//#define TESTING
#include<stdio.h>
#include<string.h>

void swap(int* a, int* b)//变量值交换函数
{
    int t = *a; *a = *b; *b = t;
}

int main()
{
    #ifdef LOCAL
    freopen("xt4-10.in","r",stdin);
    #endif
    int m,n,kase=0;
    while(scanf("%d%d",&m,&n)==2&&m&&n)
    {
        kase++;
        #ifdef TESTING
        printf("%d %d\n", m, n);
        #endif
        int tot = m*n;//tot格子总数
        int grid[tot+2],water;//grid[]格子海拔 water水量
        for(int i = 1; i <= tot; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值