-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStone.c
More file actions
67 lines (63 loc) · 2.69 KB
/
Copy pathStone.c
File metadata and controls
67 lines (63 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<stdio.h>
#define NUM 100
#define HEAP 100
int main(void){
int n, k = 0;
int stoneheap[NUM][HEAP];
int heapnum[NUM][2];
while (scanf("%d", &n) != EOF && n != 0){
for (int i = 0; i < n; i++) scanf("%d", &stoneheap[k][i]);
heapnum[k][0] = n;
k++;
}
for (int order = 0; order < k; order++){
int temp =heapnum[order][0];
int design[temp][temp];
int designx[temp][temp];
for (int i = 0; i < temp; i++){
for (int j = 0; j < temp; j++){
design[i][j] = 0;
designx[i][j] = 0;
}
}
for (int len = 2; len <= temp; len++){
for (int start = 0; start < temp; start++){
int sum = 0;
for (int i = 0; i < len; i++) sum += stoneheap[order][(start + i) % temp];
designx[start][(start + len -1 ) % temp] = sum + designx[(start + 1 + temp) % temp][(start + len - 1) % temp];
for (int l = start; l <= start + len - 1; l++){
int mid = designx[start][l % temp] + designx[(l + 1) % temp][(start + len - 1) % temp] + sum;
if (mid < designx[start][(start + len -1 ) % temp]) designx[start][(start + len -1 ) % temp] = mid;
}
design[start][(start + len -1 ) % temp] = sum + design[(start + 1 + temp) % temp][(start + len - 1) % temp];
for (int l = start; l < start + len - 1; l++){
int mid = design[start][l % temp] + design[(l + 1) % temp][(start + len - 1) % temp] + sum;
if (mid > design[start][(start + len -1 ) % temp]) design[start][(start + len -1 ) % temp] = mid;
}
}
}
int choosemax = 0;
int choosemin = 100000;
for (int i = 0; i < temp; i++){
if (design[i][(i + temp - 1) % temp] > choosemax) choosemax = design[i][(i + temp - 1) % temp];
if (designx[i][(i + temp - 1) % temp] < choosemin) choosemin = designx[i][(i + temp - 1) % temp];
}
heapnum[order][0] = choosemin;
heapnum[order][1] = choosemax;
}
for (int i = 0; i < k; i++){
printf("%d %d\n", heapnum[i][0], heapnum[i][1]);
}
return 0;
}
//if (design[(start + 1 + temp) % temp][(start + len - 1) % temp] > design[start][(start + len - 2) % temp])
//design[start][(start + len -1 ) % temp] = sum + design[(start + 1 + temp) % temp][(start + len - 1) % temp];
//else design[start][(start + len - 1) % temp] = sum + design[start][(start + len - 2) % temp];
//printf("%d\n",design[start][(start + len) % temp]);
//printf("%d",w);
//printf("%d\n",design[0][0]);
//printf("%d\n",design[0][1]);
//printf("%d\n",design[0][2]);
//if (designx[(start + 1 + temp) % temp][(start + len - 1) % temp] < designx[start][(start + len - 2) % temp])
// designx[start][(start + len -1 ) % temp] = sum + designx[(start + 1 + temp) % temp][(start + len - 1) % temp];
//else designx[start][(start + len - 1) % temp] = sum + designx[start][(start + len - 2) % temp];