結果

問題 No.3185 Three Abs
ユーザー msksknkn
提出日時 2025-06-21 18:57:46
言語 Java
(openjdk 23)
結果
AC  
実行時間 1,575 ms / 2,000 ms
コード長 1,329 bytes
コンパイル時間 3,440 ms
コンパイル使用メモリ 81,376 KB
実行使用メモリ 66,508 KB
最終ジャッジ日時 2025-08-25 23:19:38
合計ジャッジ時間 47,584 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

package no3185_three_abs;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		StringBuilder sb = new StringBuilder();
		for(int c = 0;c < t;c++) {
			int n = sc.nextInt();
			int[] a = new int[n + 1];
			for(int i = 1;i <= n;i++) {
				a[i] = sc.nextInt();
			}//dp[今いる区間について足しているor引いている][今いる区間]
			long[][] dpOld = new long[2][3];
			for(int i = 1;i <= n;i++) {
				long[][] dp = new long[2][3];
				for(int p = 0;p < 2;p++) {
					for(int q = 0;q < 3;q++) {
						dp[p][q] = Long.MIN_VALUE/2;
					}
				}//区間移動が発生しない
				for(int p = 0;p < 3;p++) {
					dp[1][p] = Math.max(dp[1][p], dpOld[1][p] - a[i]);
					dp[0][p] = Math.max(dp[0][p], dpOld[0][p] + a[i]);
				}//発生する
				if(i != n) {
					for(int p = 0;p < 2;p++) {
						dp[0][p + 1] = Math.max(dp[0][p + 1], dpOld[1][p] - a[i]);
						dp[0][p + 1] = Math.max(dp[0][p + 1], dpOld[0][p] + a[i]);
						dp[1][p + 1] = Math.max(dp[1][p + 1], dpOld[1][p] - a[i]);
						dp[1][p + 1] = Math.max(dp[1][p + 1], dpOld[0][p] + a[i]);
					}
				}dpOld = dp;
			}sb.append(Math.max(dpOld[0][2], dpOld[1][2]) + "\n");
			
		}System.out.print(sb);
	}

}
0