Submission #72830020


Source Code Expand

Copy
#include <stdio.h>
#include <stdlib.h>
#define INF 1010101010
int n, m;
int k[160];
int x[160][12], d[160][12];
int memo[160][12][160];
int calc(int row, int col, int left) {
int ans = INF;
int i, delta;
if (row > n) return 0;
if (memo[row][col][left]) return ~memo[row][col][left];
for (delta = 1; delta <= 2; delta++) {
int next_left = left - (delta != 1);
if (next_left >= 0) {
for (i = 0; i < k[row + delta]; i++) {
int candidate = calc(row + delta, i, next_left);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>

#define INF 1010101010

int n, m;
int k[160];
int x[160][12], d[160][12];

int memo[160][12][160];

int calc(int row, int col, int left) {
	int ans = INF;
	int i, delta;
	if (row > n) return 0;
	if (memo[row][col][left]) return ~memo[row][col][left];
	for (delta = 1; delta <= 2; delta++) {
		int next_left = left - (delta != 1);
		if (next_left >= 0) {
			for (i = 0; i < k[row + delta]; i++) {
				int candidate = calc(row + delta, i, next_left);
				if (1 <= row && row + delta <= n) {
					candidate += (d[row][col] + d[row + delta][i]) * abs(x[row][col] - x[row + delta][i]);
				}
				if (candidate < ans) ans = candidate;
			}
		}
	}
	return ~(memo[row][col][left] = ~ans);
}

int main(void) {
	int i;
	if (scanf("%d%d", &n, &m) != 2) return 1;
	for (i = 1; i <= n; i++) {
		int j;
		if (scanf("%d", &k[i]) != 1) return 1;
		for (j = 0; j < k[i]; j++) {
			if (scanf("%d%d", &x[i][j], &d[i][j]) != 2) return 1;
		}
	}
	k[0] = 1;
	k[n + 1] = 1;
	k[n + 2] = 1;
	printf("%d\n", calc(0, 0, m));
	return 0;
}

Submission Info

Submission Time
Task D - ぴょんぴょん川渡り
User mikecat
Language C23 (GCC 14.2.0)
Score 20
Code Size 1098 Byte
Status AC
Exec Time 6 ms
Memory 2816 KiB

Judge Result

Set Name set01 set02 set03 set04 set05 set06 set07 set08 set09 set10
Score / Max Score 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2 2 / 2
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
set06 data6
set07 data7
set08 data8
set09 data9
set10 data10
Case Name Status Exec Time Memory
data1 AC 1 ms 1760 KiB
data10 AC 6 ms 2736 KiB
data2 AC 0 ms 1824 KiB
data3 AC 1 ms 1840 KiB
data4 AC 1 ms 2296 KiB
data5 AC 1 ms 2816 KiB
data6 AC 3 ms 2392 KiB
data7 AC 5 ms 2784 KiB
data8 AC 3 ms 2432 KiB
data9 AC 3 ms 2816 KiB


2026-01-30 (Fri)
07:33:24 +09:00