aboutsummaryrefslogtreecommitdiff
path: root/tests/upload/test3_2.sy
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
committerRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
commit4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch)
treea5922559836e45fb3459a3d070367912e1035b1a /tests/upload/test3_2.sy
downloadrcc-4022e5c95210631e4aceb08eaf9d9071aa5aefc4.tar.gz
rcc-4022e5c95210631e4aceb08eaf9d9071aa5aefc4.tar.xz
Set up a git repoHEADmaster
Diffstat (limited to 'tests/upload/test3_2.sy')
-rw-r--r--tests/upload/test3_2.sy64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/upload/test3_2.sy b/tests/upload/test3_2.sy
new file mode 100644
index 0000000..9b11a59
--- /dev/null
+++ b/tests/upload/test3_2.sy
@@ -0,0 +1,64 @@
+int a[35];
+int n;
+int dp[35][35];
+int root[35][35];
+
+void output(int left, int right) {
+ int r;
+
+ if (left>right) {
+ return;
+ }
+ r = root[left][right];
+ putint(r);
+ putch(32);
+ output(left, r-1); //递归左子树
+ output(r+1, right); //递归右子树
+}
+
+int main() {
+ int i;
+ int j;
+ int k;
+ int len;
+
+ n = getint();
+
+ i=1;
+ while (i<=n) {
+ a[i] = getint();
+ dp[i][i] = a[i]; //分数
+ root[i][i] = i; //根节点
+ i=i+1;
+ }
+
+ len=2;
+ while (len<=n) { //遍历区间长度
+ i=1;
+ while (i+len-1<=n) { //遍历起点
+ j = i+len-1; //终点
+ if (dp[i+1][j] + dp[i][i] > dp[i][j]) {
+ dp[i][j] = dp[i+1][j] + dp[i][i];
+ root[i][j] = i;
+ }
+ if (dp[i][j-1] + dp[j][j] > dp[i][j]) {
+ dp[i][j] = dp[i][j-1] + dp[j][j];
+ root[i][j] = j;
+ }
+ k=i+1;
+ while (k<j) {
+ if ((dp[i][k-1] * dp[k+1][j] + dp[k][k]) > dp[i][j]) {
+ dp[i][j] = dp[i][k-1] * dp[k+1][j] + dp[k][k];
+ root[i][j] = k; //记录根
+ }
+ k=k+1;
+ }
+ i=i+1;
+ }
+ len=len+1;
+ }
+ putint(dp[1][n]);
+ putch(10);
+ output(1,n); //输出前序遍历
+ return 0;
+} \ No newline at end of file