## 武器升级最优策略 原

一切重新出发

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) {
}
}
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]);
}

}

}
}

### 一切重新出发

《魂斗罗归来》之状态模式VS策略模式

YoungManSter
2017/11/03
0
0

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

2008/12/06
2.4K
0

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

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

zhaisj
2017/05/18
0
0

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

2010/11/26
9K
1

ZStack社区版
41分钟前
3
0

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

57分钟前
5
0

demyar
58分钟前
5
0

6
0