about summary refs log tree commit diff
path: root/codechef/cirmerge.c
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-07-15 19:58:48 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-07-15 19:58:48 +0700
commitbe6678fbca007e73d69c9a9c5cddb8241a987149 (patch)
treee00165734b3b3ab2ca8d47e32ef5d7868b4804c3 /codechef/cirmerge.c
parent6c0ea3cc3364733e8d8fe7625b128f817d55b2cd (diff)
downloadcp-be6678fbca007e73d69c9a9c5cddb8241a987149.tar.gz
So I gave up on a number theory one
Diffstat (limited to 'codechef/cirmerge.c')
-rw-r--r--codechef/cirmerge.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/codechef/cirmerge.c b/codechef/cirmerge.c
new file mode 100644
index 0000000..678f47a
--- /dev/null
+++ b/codechef/cirmerge.c
@@ -0,0 +1,32 @@
+#include <stdio.h>
+
+int main()
+{
+	int t, n, i, j, k;
+	long long tmp, a[400][400], p[400][400] = {};
+
+	for (scanf("%d", &t); t--; printf("%lld\n", tmp)) {
+		scanf("%d", &n);
+		for (i = 0; i < n; ++i)
+			scanf("%lld", *a + i);
+
+		for (i = 1; i < n; ++i)
+			for (j = 0; j < n; ++j) {
+				p[i][j] = p[i-1][j];
+				for (k = 1; k < i; ++k) {
+					tmp = p[k-1][j] + p[i-k][(j+k)%n];
+					if (tmp < p[i][j])
+						p[i][j] = tmp;
+				}
+				p[i][j] += a[i][j] = a[i-1][j] + a[0][(i+j)%n];
+			}
+
+		long long *m = p[n-1];
+		tmp = *m;
+		for (i = 1; i < n; ++i)
+			if (m[i] < tmp)
+				tmp = m[i];
+	}
+
+	return 0;
+}