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;}
#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 |
|
|
|
|
|
| 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 |