Submission #74399930


Source Code Expand

Copy
#include <stdio.h>
#include <inttypes.h>
int N;
int seisu[128];
uint64_t memo[128][32];
uint64_t calc(int pos, int cur) {
uint64_t ans = 0;
if (pos == N) return cur == seisu[pos];
if (cur < 0 || 20 < cur) return 0;
if (memo[pos][cur]) return ~memo[pos][cur];
/* + */
ans += calc(pos + 1, cur + seisu[pos]);
/* - */
if (pos > 1) {
ans += calc(pos + 1, cur - seisu[pos]);
}
return ~(memo[pos][cur] = ~ans);
}
int main(void) {
int i;
if (scanf("%d", &N) != 1) return 1;
for (i = 1; i <= N; i++) {
if (scanf("%d", &seisu[i]) != 1) return 1;
}
printf("%" PRIu64 "\n", calc(1, 0));
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <inttypes.h>

int N;
int seisu[128];

uint64_t memo[128][32];

uint64_t calc(int pos, int cur) {
	uint64_t ans = 0;
	if (pos == N) return cur == seisu[pos];
	if (cur < 0 || 20 < cur) return 0;
	if (memo[pos][cur]) return ~memo[pos][cur];
	/* + */
	ans += calc(pos + 1, cur + seisu[pos]);
	/* - */
	if (pos > 1) {
		ans += calc(pos + 1, cur - seisu[pos]);
	}
	return ~(memo[pos][cur] = ~ans);
}

int main(void) {
	int i;
	if (scanf("%d", &N) != 1) return 1;
	for (i = 1; i <= N; i++) {
		if (scanf("%d", &seisu[i]) != 1) return 1;
	}
	printf("%" PRIu64 "\n", calc(1, 0));
	return 0;
}

Submission Info

Submission Time
Task D - 1 年生 (A First Grader)
User mikecat
Language C23 (GCC 14.2.0)
Score 100
Code Size 643 Byte
Status AC
Exec Time 1 ms
Memory 1832 KiB

Judge Result

Set Name set01 set02 set03 set04 set05
Score / Max Score 20 / 20 20 / 20 20 / 20 20 / 20 20 / 20
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
Case Name Status Exec Time Memory
data1 AC 1 ms 1604 KiB
data2 AC 0 ms 1536 KiB
data3 AC 0 ms 1700 KiB
data4 AC 0 ms 1832 KiB
data5 AC 0 ms 1616 KiB


2026-03-26 (Thu)
03:54:48 +09:00