Java 求助MLE
  • 板块P1464 Function
  • 楼主Tomatos03
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/29 23:14
  • 上次更新2023/11/30 13:52:09
查看原帖
Java 求助MLE
1035847
Tomatos03楼主2023/11/29 23:14

Subtask #1 第2个点 一直MLE,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

import static java.lang.Math.*;

public class Main {
	static HashMap<String, Integer> map = new HashMap<>();
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder ans = new StringBuilder();
		while (true) {
			String[] nums = in.readLine().split(" ");
			long a = Long.parseLong(nums[0]);
			long b = Long.parseLong(nums[1]);
			long c = Long.parseLong(nums[2]);
			if (a == -1 && b == -1 && c == -1) {
				break;
			}
			int val = w((int)min(a, 21), (int)min(b, 21), (int)min(c, 21));
			ans.append(String.format("w(%d, %d, %d) = %d\n", a, b, c, val));
		}
		System.out.print(ans);
		in.close();
	}
	static private int w(int a, int b, int c) {
		if (a <= 0 || b <= 0 || c <= 0) {
			return 1;
		}

		String cur = String.format("%d %d %d", a, b, c);
		if (map.containsKey(cur)) {
			return map.get(cur);
		}

		if (a > 20 || b > 20 || c > 20) {
			int d = w(20, 20, 20);
			map.put(cur, d);
			return d;
		}
		if (a < b && b < c) {
			int d = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
			map.put(cur, d);
			return d;
		}

		int d = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
		map.put(cur, d);
		return d;
	}
}
2023/11/29 23:14
加载中...