HDOJ 1330 Deck(叠木块-物理题啊!贪心算法用到了一点)

简介: HDOJ 1330 Deck(叠木块-物理题啊!贪心算法用到了一点)

Problem Description

A single playing card can be placed on a table, carefully, so that the short edges of the card are parallel to the table’s edge, and half the length of the card hangs over the edge of the table. If the card hung any further out, with its center of gravity off the table, it would fall off the table and flutter to the floor. The same reasoning applies if the card were placed on another card, rather than on a table.


Two playing cards can be arranged, carefully, with short edges parallel to table edges, to extend 3/4 of a card length beyond the edge of the table. The top card hangs half a card length past the edge of the bottom card. The bottom card hangs with only 1/4 of its length past the table’s edge. The center of gravity of the two cards combined lies just over the edge of the table.


Three playing cards can be arranged, with short edges parallel to table edges, and each card touching at most one other card, to extend 11/12 of a card length beyond the edge of the table. The top two cards extend 3/4 of a card length beyond the edge of the bottom card, and the bottom card extends only 1/6 over the table’s edge; the center of gravity of the three cards lines over the edges of the table.


If you keep stacking cards so that the edges are aligned and every card has at most one card above it and one below it, how far out can 4 cards extend over the table’s edge? Or 52 cards? Or 1000 cards? Or 99999?


Input

Input contains several nonnegative integers, one to a line. No integer exceeds 99999.


Output

The standard output will contain, on successful completion of the program, a heading:


# Cards Overhang


(that’s two spaces between the words) and, following, a line for each input integer giving the length of the longest overhang achievable with the given number of cards, measured in cardlengths, and rounded to the nearest thousandth. The length must be expressed with at least one digit before the decimal point and exactly three digits after it. The number of cards is right-justified in column 5, and the decimal points for the lengths lie in column 12.


Sample Input

1

2

3

4

30


Sample Output

The line of digits is intended to guide you in proper output alignment, and is not part of the output that your solution should produce.


12345678901234567


# Cards  Overhang
    1     0.500
    2     0.750
    3     0.917
    4     1.042
   30     1.997


物理题!还是一个英语题!

题意:就是在桌面上铺一样的卡片,求最多能够超过桌面多少。


理想化条件:问题中几个理想化的用词—“水平桌面”、“完全相同”、“质量均匀”、“长方体”


物理学原理: 若物体的重心位于支持面的上方,当重力作用线在支持面内,重力矩与支持力矩平衡,物体处于平衡状态;反之,重力矩与支持力矩同方向,物体处于不平衡状态;临界的平衡条件为重力的作用线恰好经过支持面的边缘。

image.png

贪心法求解: 设每个卡片长度均为L,重力均为G。将卡片从上到下编号,依次为1、2、3、„、n。记第k(k=1,2,3,„,n)块卡片相对其下方支持物的最大允许伸出量为x.k(n号卡片的支持物为水平桌面,其余卡片的支持物为其下方的木块),第k块卡片及其上方所有卡片的公共重心到第k块卡片另一端的距离为g.k。显然,1号卡片的伸出量为及公共重心为


image.png


现加入2号卡片,1号卡片平衡的临界条件为其重力作用下恰好位于2号卡片对其支持面的边缘。公共重心的坐标是其各组成部分的重心坐标的加权平均,在图示位置下两个卡片的公共重心到2号卡片最左端的距离为


image.png


image.png


加入第k块卡片后的公共重心到第k块卡片最左端的距离为:

image.png



第t块木块的最大允许伸出量为:

image.png



总伸出量为:

image.png


贪心算法简介:

所谓贪心算法,就是指在对问题求解时,总是做出在当前看来是最好的选择。在本题中,每一步加入一个木块,1号木块的最大允许伸出量为L/2;加入2号木块后,两个木块的公共重心与1号木块的伸出量有关,那么2号木块的最大允许伸出量也就受1号木块的最大允许伸出量所限。由于贪心算法并非从整体最优上加以考虑,使得贪心算法并非对所有的问题都能求得最佳解;但在大多数情况下,贪心算法都能得出满意解。

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double[] dabiao = new double[100010];
        double sum=0.0;
        dabiao[1]=0.5;
        for(int i=2;i<=100000;i++){
            dabiao[i]=dabiao[i-1]+1.0/i/2.0;
        }
        System.out.println("# Cards  Overhang");
        while(sc.hasNext()){
            int n = sc.nextInt();
            System.out.printf("%5d%10.3f\r\n",n,dabiao[n]);
        }
    }
}


目录
相关文章
|
5月前
|
算法 搜索推荐
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
41 0
|
6月前
|
算法 JavaScript 前端开发
游戏物理系统 - 如何在JavaScript中实现基本的碰撞检测算法?
在JavaScript中实现2D矩形碰撞检测,常用AABB方法,适合简单游戏。创建Rectangle类,包含位置和尺寸属性,并定义`collidesWith`方法检查两矩形是否相交。通过比较边界位置判断碰撞,当四条边界条件均满足时,认定发生碰撞。基础算法适用于初级需求,复杂场景可采用更高级的碰撞检测库。
61 1
|
机器学习/深度学习 算法 决策智能
方程就是二叉树森林?遗传算法从数据中直接发现未知控制方程和物理机理
方程就是二叉树森林?遗传算法从数据中直接发现未知控制方程和物理机理
100 0
|
机器学习/深度学习 传感器 算法
基于雾凇冰物理现象优化算法RIME求解单目标优化问题附matlab代码
基于雾凇冰物理现象优化算法RIME求解单目标优化问题附matlab代码
|
传感器 机器学习/深度学习 算法
【WSN】基于LGNDO算法实现传感器物理路由优化附matlab代码
【WSN】基于LGNDO算法实现传感器物理路由优化附matlab代码
|
机器学习/深度学习 编解码 算法
【物理应用】基于粒子群优化算法实现瞬变电磁法视电阻率反演附matlab代码
【物理应用】基于粒子群优化算法实现瞬变电磁法视电阻率反演附matlab代码
【物理应用】基于粒子群优化算法实现瞬变电磁法视电阻率反演附matlab代码
|
算法 Java
Java反转IC卡16进制物理卡号算法
IC卡的物理卡号一般由16进制的字符组成,日常常见的有直读卡号和反转后的卡号,本文用一个简单的算法获取反转后的卡号。
1007 0
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。