首页 > 其他分享 >799. 香槟塔

799. 香槟塔

时间:2022-11-21 19:55:34浏览次数:60  
标签:顶层 799 poured 香槟 query 玻璃杯 row

799. 香槟塔

我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。

从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)

例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟,如下图所示。

现在当倾倒了非负整数杯香槟后,返回第 ij 个玻璃杯所盛放的香槟占玻璃杯容积的比例( ij 都从0开始)。

示例 1:
输入: poured(倾倒香槟总杯数) = 1, query_glass(杯子的位置数) = 1, query_row(行数) = 1
输出: 0.00000
解释: 我们在顶层(下标是(0,0))倒了一杯香槟后,没有溢出,因此所有在顶层以下的玻璃杯都是空的。

示例 2:
输入: poured(倾倒香槟总杯数) = 2, query_glass(杯子的位置数) = 1, query_row(行数) = 1
输出: 0.50000
解释: 我们在顶层(下标是(0,0)倒了两杯香槟后,有一杯量的香槟将从顶层溢出,位于(1,0)的玻璃杯和(1,1)的玻璃杯平分了这一杯香槟,所以每个玻璃杯有一半的香槟。

示例 3:

输入: poured = 100000009, query_row = 33, query_glass = 17
输出: 1.00000

提示:

  • 0 <= poured <= 109
  • 0 <= query_glass <= query_row < 100

解法:动态规划啊!!!

class Solution {
    public double champagneTower(int poured, int query_row, int query_glass) {
        double[] row = {poured};
        for (int i = 1;i <= query_row;i++) {
            double[] nextRow = new double[i+1];
            for (int j =0; j < i;j++) {
                double volume = row[j];
                if (volume > 1) {
                    nextRow[j] += (volume-1)/2;
                    nextRow[j+1] += (volume-1)/2;
                }
            }
            row = nextRow;
        }
        return Math.min(1,row[query_glass]);
    }
}

 

标签:顶层,799,poured,香槟,query,玻璃杯,row
From: https://www.cnblogs.com/fulaien/p/16912994.html

相关文章

  • 799. 香槟塔 ----- 动态规划、模拟、逆向
    我们把玻璃杯摆成金字塔的形状,其中 第一层 有1个玻璃杯,第二层 有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟。从顶层的第一个玻璃杯开始倾倒一些香槟,......
  • 最长回文串 香槟塔
    409.最长回文串Map<Character,Integer>map=newHashMap<>();char[]str=s.toCharArray();for(inti=0;i<s.length();i++){map.put(str[i],map.getOrDef......
  • Leetcode 799.香槟塔:动态规划+递归
    香槟塔:动态规划+递归题目来源:Leetcode22/11/20每日一题:799.香槟塔https://leetcode.cn/problems/champagne-tower我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻......
  • 799. 最长连续不重复子序列
    给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0∼105范围内),表示整数序列。输出......
  • 799. 最长连续不重复子序列
    记录每个数字出现次数,如果又多次出现就从当前位置重新开始计算长度#include<iostream>usingnamespacestd;constintN=100010;intn;......
  • 《GB27995.2-2011》PDF下载
    《GB27995.2-2011半成品眼镜片毛坯第2部分:渐变焦眼镜片毛坯规范》PDF下载《GB27995.2-2011》简介GB27995的本部分规定了渐变焦半成品眼镜片毛坯的光学和几何性能的要......