@@ -17,7 +17,7 @@ public class Util {
17
17
public static int nextOperationOffset (int Difference , int [] lastRules , int [] itemRules ) {
18
18
/**
19
19
* 计算下一步步骤.
20
- *
20
+ *
21
21
* @param Difference 目标锻造值-当前锻造值-锻造偏移值
22
22
* @param lastRules 锻造步骤要求
23
23
* @param itemRules 最后三步步骤
@@ -65,25 +65,27 @@ public static void preCalculator() {
65
65
// tfc+锻造槽150,tfc应该也是150
66
66
// tfc+中锻造初值在70到120之间
67
67
// 锻造指针在0到150之间
68
- // target-current应该在-80到120之间,但因为查表是使用的值减去了锻造偏移,因此扩大了范围
69
- // -100<=target-current<=140
70
- // 0<=target-current+100<=240
71
- // dp[100+i]表示锻造差值为i时的最少锻造步骤数
72
- // dp[100]=0
73
- // dp[100+i]=Math.min(dp[80+i-operations[j]]) +1
74
- for (int i = -100 ; i <= 140 ; i ++) {
68
+ // 这个函数是预计算到某个数值需要各种锻造步骤的数量, 结果保存在steps这个哈希map中
69
+ // 为了降低算法的复杂性, 输入的值是目标锻造值-当前锻造值-锻造偏移值,其中目标锻造值与种子有关,范围是70-120,
70
+ // 当前锻造值是砧gui槽下面的指针,范围是0-150,锻造偏移值是当前配方要求步骤的数值和,范围是-45到48
71
+ // 因此输入值的实际范围是-128到165
72
+ // 但是因为目标锻造值-锻造偏移值一定处于0-150之间,因此实际范围是-150到150,而不是-128到165
73
+ // dp[150+i]表示锻造差值为i时的最少锻造步骤数
74
+ // dp[150]=0
75
+ // dp[150+i]=Math.min(dp[80+i-operations[j]]) +1
76
+ for (int i = -150 ; i <= 150 ; i ++) {
75
77
steps .put (i , new int [] { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 });
76
78
}
77
- int [] dp = new int [241 ];
78
- for (int i = 0 ; i < 241 ; i ++) {
79
+ int [] dp = new int [301 ];
80
+ for (int i = 0 ; i < 301 ; i ++) {
79
81
dp [i ] = 100 ;
80
82
}
81
- dp [100 ] = 0 ;
83
+ dp [150 ] = 0 ;
82
84
// 这里正反两次遍历dp数组,因为单次遍历有某些值无法到达
83
- for (int i = 140 ; i >= -100 ; i --) {
85
+ for (int i = 150 ; i >= -150 ; i --) {
84
86
foreachoperation (dp , i );
85
87
}
86
- for (int i = -100 ; i <= 140 ; i ++) {
88
+ for (int i = -150 ; i <= 150 ; i ++) {
87
89
foreachoperation (dp , i );
88
90
}
89
91
operationsTfc .put (0 , 3 );
@@ -104,9 +106,9 @@ public static void preCalculator() {
104
106
105
107
private static void foreachoperation (int [] dp , int i ) {
106
108
for (int op : operations ) {
107
- if (i - op >= -100 && i - op <= 140 ) {
108
- if (dp [100 + i ] > dp [100 + i - op ] + 1 ) {
109
- dp [100 + i ] = dp [100 + i - op ] + 1 ;
109
+ if (i - op >= -150 && i - op <= 150 ) {
110
+ if (dp [150 + i ] > dp [150 + i - op ] + 1 ) {
111
+ dp [150 + i ] = dp [150 + i - op ] + 1 ;
110
112
steps .put (
111
113
i ,
112
114
steps .get (i - op )
0 commit comments