21.解闷算法-双蛋问题(dp)

双蛋问题:

public class Egg {

 
    public static void main(String[] args) {
        int[][] a = new int[1][2];
        System.out.println(a.length);//1
        new Egg().dp(100);
    }

    //t层楼,2个蛋
    public void dp(int t) {
        //t层楼,n个鸡蛋最多需要多少次
        int[][] a = new int[t + 1][3];

        //楼层数量一直在变化,只有1个鸡蛋时候的扔法
        for (int i = 1; i < a.length; i++) {
            a[i][1] = i;
        }
        //只有1层楼,鸡蛋数量一直在变化时候的扔法
        for (int i = 1; i < a[0].length; i++) {
            a[1][i] = 1;
        }
        //从只有2层楼的情况开始
        for (int i = 2; i <= t; i++) {

            int result = Integer.MAX_VALUE;
            //从第一层开始扔,一直有t中扔法
            for (int j = 1; j < i; j++) {
                //鸡蛋碎了,还有j-1层楼(从第一层到第j层),1个鸡蛋
                int timesA = a[j - 1][1] + 1;
                //鸡蛋没碎,还有i-j层楼,2个鸡蛋
                int timesB = a[i - j][2] + 1;
                //楼层最不容易验出来的情况下所需要扔的最大次数
                int bad = Math.max(timesA, timesB);
                //记录选取最好的扔法
                result = Math.min(bad, result);
            }
            a[i][2] = result;
        }
    }
}

n蛋问题:

/**
 * N个蛋,T层楼高
 * 第一个蛋扔在第K层的时候
 * 1个蛋1层楼
 */
public class Egg {

    //t层楼,n个蛋
    public void dp(int t, int n) {
        //t层楼,n个鸡蛋最多需要多少次
        int[][] a = new int[t + 1][n + 1];
        //1层楼,蛋的数量在变化
        for (int i = 1; i <= n; i++) {
            a[1][i] = 1;
        }
        //1个蛋,楼层在变化
        for (int j = 1; j <= t; j++) {
            a[j][1] = j;
        }
        //楼层在升高
        for (int t1 = 2; t1 < t + 1; t1++) {
            //蛋的数量在增加
            for (int n1 = 2; n1 < n + 1; n1++) {
                int min = Integer.MAX_VALUE;
                //从第1层开始扔
                for (int f = 1; f < t1; f++) {
                    //如果鸡蛋没碎,求解方程就是t1-f楼,n1个蛋的情况
                    int timesA = a[t1 - f][n1];
                    //如果鸡蛋碎了,证明还有f-1层楼,n1-1个蛋的情况
                    int timesB = a[f - 1][n1 - 1];
                    //先取最坏情况需要探测的次数,在找到最好的楼层扔法
                    int bad = Math.max(timesA, timesB) + 1;
                    //计算最坏情况的最好解法
                    min = Math.min(min,bad);
                }
                //按楼层不变,蛋数递增的情况一步步填充。
                a[t1][n1] = min;
            }
        }
        for (int i = 1; i < a.length; i++) {
            for (int j = 1; j < a[i].length; j++) {
                System.out.println(i+"层楼"+j+"个蛋的最好扔法需扔:"+a[i][j]+"次");
            }
        }

    }
    public static void main(String[] args){
        new Egg().dp(100,2);
    }
}

ECShop解闷商城系统是一个经过开发和优化的购物商城源码,适用于休闲娱乐行业。该系统提供了完善的功能和用户友好的界面,可以帮助商家轻松搭建起一个专业的电子商务平台。 首先,ECShop解闷商城系统提供了丰富的商城功能。商家可以通过该系统进行商品管理、订单管理、库存管理等操作,方便地管理和推广自己的产品。此外,系统还支持购物车功能,让用户可以一次性购买多个商品,提升购物体验。 其次,ECShop解闷商城系统提供了灵活的支付方式。用户可以选择支付宝、微信支付、银联支付等多种支付方式进行付款,方便快捷。商家可以根据自己的需求设置合适的支付方式,并保证支付的安全性和可靠性。 另外,ECShop解闷商城系统还提供了个性化的模板和界面设计。商家可以根据自己的品牌形象和产品特点进行界面定制,增加商城的专业度和吸引力。同时,系统也支持响应式设计,可以适应不同屏幕尺寸的设备,提供良好的用户体验。 最后,ECShop解闷商城系统还具有良好的扩展性。商家可以通过插件和模块的方式进行功能的扩展和定制,满足个性化需求。此外,系统还提供了多语言支持,可以适应国内外不同地区的用户需求。 综上所述,ECShop解闷商城系统是一款功能强大、灵活性高、扩展性好的购物商城源码。它能够帮助商家搭建一个专业的电子商务平台,并提升用户购物体验,实现商家的销售目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值