文档章节

武器升级最优策略

 一切重新出发
发布于 2017/03/12 03:27
字数 400
阅读 9
收藏 0

测试输入简介

1//测试数量
3//武器数量
10//初始金币
A//武器名 2//可升级次数 10//第一次提升战斗力 1//第一次消耗金币 20//第二次提升战斗力 10//第二次消耗金币
B 3 1 5 2 3 10 1
C 2 1 9 20 1

 

代码(其实可以动态规划,原谅我的懒惰吧)

package test1;

import java.util.*;

public class Main {

    public static class Record {

        int value;
        int level[];

        public Record() {
        }

        public Record(int value, int[] level) {
            this.value = value;
            this.level = level;
        }

        int printLevel() {
            System.out.println(this.hashCode());
            for (int i = 0; i < level.length; ++i) {
                System.out.print(level[i] + " ");
            }
            System.out.println();
            return 0;
        }

    }

    static Record solve(int n, int c, int levelArray[], ArrayList w[], ArrayList v[]) {
        if (n == -1 || c <= 0) {
            return new Record(0, new int[levelArray.length]);
        }

        for (int i = n; i >= 0; --i) {
            Record temp1 = solve(n - 1, c, levelArray, w, v);
            Record temp2 = new Record(0, new int[levelArray.length]);
            int maxLevel = levelArray[i];
            int count = c;
            int a[] = levelArray.clone();
            int pd = 0;
            while (--maxLevel >= 0) {
                a[i] = maxLevel;
                count = count - (int) w[i].get(a[i]);
                if(count < 0){
                    break;
                }
                Record tempA = solve(n - 1, count, a, w, v);
                pd += (int) v[i].get(a[i]);
                System.out.println(pd);
                temp2.value = tempA.value + pd;
                int levelT = temp2.level[i]+1;
                temp2.level = tempA.level;
                temp2.level[i] += levelT;
            }

            return (temp1.value > temp2.value ? temp1 : temp2);
        }
        return new Record(0, new int[levelArray.length]);
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for (int t = 0; t < T; ++t) {
            int itemNum = in.nextInt();
            int gold = in.nextInt();
            String name[] = new String[itemNum];
            int levelUP[] = new int[itemNum];
            ArrayList powerUP[] = new ArrayList[itemNum];
            ArrayList cost[] = new ArrayList[itemNum];
            int maxLevel = 0;
            for (int item = 0; item < itemNum; ++item) {
                name[item] = in.next();
                levelUP[item] = in.nextInt();
                maxLevel = (maxLevel < levelUP[item]) ? levelUP[item] : maxLevel;
                powerUP[item] = new ArrayList<>(levelUP[item]);
                cost[item] = new ArrayList<>(levelUP[item]);
                for (int l = 0; l < levelUP[item]; ++l) {
                    powerUP[item].add(0, in.nextInt());
                    cost[item].add(0,in.nextInt());
                }
            }
            Record r = solve(itemNum - 1, gold, levelUP, cost, powerUP);
            System.out.println((r.value));
            for(int item = 0; item < itemNum; ++item){
                System.out.println(name[item]+"+"+r.level[item]);
            }

        }

    }
}
 

© 著作权归作者所有

粉丝 0
博文 8
码字总数 1999
作品 0
广州
私信 提问
《魂斗罗归来》之状态模式VS策略模式

欢迎收看俗到掉渣的《小Y讲堂》节目,大家好,我是小Y,一个集性感毛发与才华于一身的程序猿。小Y的设计模式系列中的「状态模式」和「策略模式」都已经总结完成了,很多小伙伴都会凌乱在这两种...

YoungManSter
2017/11/03
0
0
外星人入侵模拟游戏--Alien Invasion

Alien Invasion 是一款模拟外星人入侵的3D游戏,包含多种武器和升级方式。支持Windows、Linux和Mac OS X。 游戏简介 游戏发生在2084年,你控制了一个秘密组织来保卫地球,抵御外来敌人。建立你...

匿名
2008/12/06
2.4K
0
设计模式系列之「策略模式」

欢迎收看俗到掉渣的《小Y讲堂》节目,大家好,我是小Y,一个集性感毛发与才华于一身的程序猿......小Y上一篇写的是设计模式系列之「状态模式」,这篇小Y要介绍它的孪生兄弟——策略模式。 一、...

YoungManSter
2017/10/26
0
0
WannaCry勒索病毒事件的“来龙去脉”

WannaCry勒索病毒事件的“来龙去脉” Jackzhai 一、背景: 2017年5月12日是个平静的日子,大家都高高兴兴地收拾回家度周末了。然而,从下午开始,网络安全公司就不断接到用户求救电话,越来越...

zhaisj
2017/05/18
0
0
永恒之塔java版服务器--AionChs

1、升级奖励系统: 可以自定义设置6个不同等级以及奖励物品,数量 和 升级后系统提示的信息。 例如: 设置 50级 奖励100瓶药水 或者 基纳 神石 武器 等 , 提示消息为 “恭喜你升级到50级,你...

匿名
2010/11/26
9K
1

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
41分钟前
3
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
41分钟前
4
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
57分钟前
5
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
58分钟前
5
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部