Submission #2417866


Source Code Expand

#include <iostream>
#include <algorithm>
#include <queue>
#include <tuple>
using namespace std;

int dp[32][109][109][109], N, A[109], B[109], C[109];
queue<tuple<int, int, int>>Q;
vector<tuple<int, int, int>>X[5000];

void refresh(int s, int k, int a, int b, int c, int p) {
	if (dp[k][a][b][c] <= p) return;
	dp[k][a][b][c] = p;
	if (s == k) X[p].push_back(make_tuple(a, b, c));
}

int main() {
	cin >> N;
	for (int i = 1; i <= N; i++) cin >> A[i] >> B[i] >> C[i];
	for (int i = 0; i <= 31; i++) { for (int j = 0; j <= 108; j++) { for (int k = 0; k <= 108; k++) { for (int l = 0; l <= 108; l++) dp[i][j][k][l] = 10000; } } }

	dp[1][100][A[1]][0] = 0;
	for (int i = 1; i <= N; i++) {
		// 敵から攻撃を受ける
		while (!Q.empty()) Q.pop();
		for (int j = 0; j <= 100; j++) {
			for (int k = 0; k <= 100; k++) {
				for (int l = 0; l <= 100; l++) { if (dp[i][j][k][l] <= 4000) X[dp[i][j][k][l]].push_back(make_tuple(j, k, l)); }
			}
		}
		for (int j = 0; j < 4000; j++) {
			for (int k = 0; k < X[j].size(); k++) {
				int a = get<0>(X[j][k]), b = get<1>(X[j][k]), c = get<2>(X[j][k]);
				if (dp[i][a][b][c] != j) continue;
				Q.push(make_tuple(a, b, c));
			}
			while (!Q.empty()) {
				int a = get<0>(Q.front()), b = get<1>(Q.front()), c = get<2>(Q.front()); Q.pop();
				if (a <= B[i]) continue;

				// 守備
				refresh(i, i, min(100, a - B[i] + 50), min(A[i], b + C[i]), 0, dp[i][a][b][c] + 1);

				// 攻撃
				if (b >= 6) refresh(i, i, a - B[i], min(A[i], b - 5 + C[i]), 0, dp[i][a][b][c] + 1);
				else refresh(i, i + 1, a - B[i], A[i + 1], 0, dp[i][a][b][c] + 1);

				// 連続攻撃
				if (b >= c + 2) refresh(i, i, a - B[i], min(A[i], b - (c + 1) + C[i]), c + 1, dp[i][a][b][c] + 1);
				else refresh(i, i + 1, a - B[i], A[i + 1], c + 1, dp[i][a][b][c] + 1);
			}
		}
	}
	int minx = 10000;
	for (int j = 0; j <= 100; j++) {
		for (int k = 0; k <= 100; k++) {
			for (int l = 0; l <= 100; l++) minx = min(minx, dp[N + 1][j][k][l]);
		}
	}
	if (minx == 10000) minx = -1;
	cout << minx << endl;
	return 0;
}

Submission Info

Submission Time
Task C - Code Art Online
User E869120
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2095 Byte
Status AC
Exec Time 352 ms
Memory 197044 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 103
Set Name Test Cases
All 00_sample00, 00_sample01, 00_sample02, 10_input00, 10_input01, 10_input02, 10_input03, 10_input04, 10_input05, 10_input06, 10_input07, 10_input08, 10_input09, 10_input10, 10_input11, 10_input12, 10_input13, 10_input14, 10_input15, 10_input16, 10_input17, 10_input18, 10_input19, 10_input20, 10_input21, 10_input22, 10_input23, 10_input24, 10_input25, 10_input26, 10_input27, 10_input28, 10_input29, 20_input30, 20_input31, 20_input32, 20_input33, 20_input34, 20_input35, 20_input36, 20_input37, 20_input38, 20_input39, 20_input40, 20_input41, 20_input42, 20_input43, 20_input44, 20_input45, 20_input46, 20_input47, 20_input48, 20_input49, 30_input50, 30_input51, 30_input52, 30_input53, 30_input54, 30_input55, 30_input56, 30_input57, 30_input58, 30_input59, 30_input60, 30_input61, 30_input62, 30_input63, 30_input64, 30_input65, 30_input66, 30_input67, 30_input68, 30_input69, 40_input70, 40_input71, 40_input72, 40_input73, 40_input74, 40_input75, 40_input76, 40_input77, 40_input78, 40_input79, 40_input80, 40_input81, 40_input82, 40_input83, 40_input84, 40_input85, 40_input86, 40_input87, 40_input88, 40_input89, 40_input90, 40_input91, 40_input92, 40_input93, 40_input94, 40_input95, 40_input96, 40_input97, 40_input98, 40_input99
Case Name Status Exec Time Memory
00_sample00 AC 57 ms 162304 KB
00_sample01 AC 59 ms 162304 KB
00_sample02 AC 84 ms 167488 KB
10_input00 AC 60 ms 162304 KB
10_input01 AC 74 ms 162304 KB
10_input02 AC 77 ms 162304 KB
10_input03 AC 65 ms 162304 KB
10_input04 AC 74 ms 162304 KB
10_input05 AC 79 ms 162304 KB
10_input06 AC 58 ms 162304 KB
10_input07 AC 58 ms 162304 KB
10_input08 AC 72 ms 162304 KB
10_input09 AC 82 ms 162304 KB
10_input10 AC 68 ms 162304 KB
10_input11 AC 64 ms 162304 KB
10_input12 AC 81 ms 162304 KB
10_input13 AC 62 ms 162304 KB
10_input14 AC 62 ms 162304 KB
10_input15 AC 57 ms 162304 KB
10_input16 AC 75 ms 162304 KB
10_input17 AC 77 ms 162304 KB
10_input18 AC 57 ms 162304 KB
10_input19 AC 76 ms 162304 KB
10_input20 AC 82 ms 162560 KB
10_input21 AC 67 ms 162304 KB
10_input22 AC 79 ms 162304 KB
10_input23 AC 69 ms 162304 KB
10_input24 AC 75 ms 162304 KB
10_input25 AC 76 ms 162304 KB
10_input26 AC 69 ms 162304 KB
10_input27 AC 66 ms 162304 KB
10_input28 AC 71 ms 162304 KB
10_input29 AC 70 ms 162304 KB
20_input30 AC 70 ms 162304 KB
20_input31 AC 67 ms 162304 KB
20_input32 AC 86 ms 164352 KB
20_input33 AC 73 ms 162560 KB
20_input34 AC 69 ms 162304 KB
20_input35 AC 73 ms 162816 KB
20_input36 AC 61 ms 162304 KB
20_input37 AC 75 ms 162688 KB
20_input38 AC 66 ms 162560 KB
20_input39 AC 62 ms 162304 KB
20_input40 AC 68 ms 162304 KB
20_input41 AC 62 ms 162432 KB
20_input42 AC 61 ms 162304 KB
20_input43 AC 67 ms 162304 KB
20_input44 AC 68 ms 163328 KB
20_input45 AC 62 ms 162304 KB
20_input46 AC 65 ms 163072 KB
20_input47 AC 65 ms 162560 KB
20_input48 AC 68 ms 162304 KB
20_input49 AC 69 ms 162432 KB
30_input50 AC 82 ms 162560 KB
30_input51 AC 86 ms 163840 KB
30_input52 AC 67 ms 162304 KB
30_input53 AC 77 ms 162560 KB
30_input54 AC 78 ms 162816 KB
30_input55 AC 85 ms 163072 KB
30_input56 AC 87 ms 163072 KB
30_input57 AC 73 ms 162688 KB
30_input58 AC 80 ms 162304 KB
30_input59 AC 78 ms 163584 KB
30_input60 AC 77 ms 162304 KB
30_input61 AC 65 ms 162304 KB
30_input62 AC 69 ms 162304 KB
30_input63 AC 92 ms 163456 KB
30_input64 AC 68 ms 162304 KB
30_input65 AC 68 ms 163072 KB
30_input66 AC 101 ms 164992 KB
30_input67 AC 66 ms 162432 KB
30_input68 AC 64 ms 162304 KB
30_input69 AC 71 ms 162304 KB
40_input70 AC 211 ms 185456 KB
40_input71 AC 227 ms 185972 KB
40_input72 AC 337 ms 195516 KB
40_input73 AC 222 ms 187064 KB
40_input74 AC 352 ms 197044 KB
40_input75 AC 322 ms 194692 KB
40_input76 AC 241 ms 187788 KB
40_input77 AC 257 ms 189152 KB
40_input78 AC 312 ms 194152 KB
40_input79 AC 214 ms 185892 KB
40_input80 AC 318 ms 194372 KB
40_input81 AC 271 ms 190484 KB
40_input82 AC 209 ms 185012 KB
40_input83 AC 242 ms 188664 KB
40_input84 AC 192 ms 183680 KB
40_input85 AC 237 ms 187872 KB
40_input86 AC 249 ms 189772 KB
40_input87 AC 252 ms 188896 KB
40_input88 AC 221 ms 187652 KB
40_input89 AC 310 ms 194684 KB
40_input90 AC 276 ms 191216 KB
40_input91 AC 208 ms 186028 KB
40_input92 AC 267 ms 190620 KB
40_input93 AC 210 ms 186160 KB
40_input94 AC 282 ms 191336 KB
40_input95 AC 293 ms 192220 KB
40_input96 AC 208 ms 185236 KB
40_input97 AC 211 ms 186432 KB
40_input98 AC 190 ms 183720 KB
40_input99 AC 259 ms 188888 KB