tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

SRM 527 Div1

また引退をしていた
275:知るか
木がある。なんかする。

import java.util.*;
public class P8XGraphBuilder{
	static int dp[];
	static boolean v[];
	static int score[];
	public static int calc(int a){
		if(v[a])return dp[a];
		if(a==0){
			v[a]=true;
			return dp[a]=score[0];
		}

		int dp2[][]=new int[a+1][a+1];
		for(int i=0;i<=a;i++)
			for(int j=0;j<=a;j++)
				dp2[i][j]=-99999999;
		dp2[0][0]=0;
		for(int i=1;i<=a;i++)dp2[i][0]=-99999999;
		for(int i=1;i<=a;i++)dp2[0][i]=-99999999;
		for(int i=1;i<=a;i++){
			for(int j=1;j<=a;j++){
				for(int k=1;k<=j;k++){
					dp2[i][j]=Math.max(dp2[i][j],dp2[i-1][j-k]+calc(k-1));
				}
			}
		}
		//for(int i=1;i<=a;i++){
		//	for(int j=1;j<=a;j++)
		//		System.out.print(dp2[i][j]+" ");
		//	System.out.println();
		//}
		//System.out.println();
		v[a]=true;
		int ret=0;
		for(int i=1;i<=a;i++)ret=Math.max(ret,dp2[i][a]+(a==score.length?score[i-1]:score[i]));
//		for(int i=1;i<=a;i++)System.out.print((dp2[i][a]+(a==score.length?score[i-1]:score[i]))+" ");
	//	System.out.println(a+" "+ret);
//		System.out.println();
		return dp[a]=ret;
	}
	public int solve(int a[]){
		dp=new int[a.length+2];
		v=new boolean[a.length+2];
		score=a;
		return calc(a.length);
	}
}

450:どうみてもフローなのでどうやって辞書順にするか考える問題だが、どうやって辞書順にするのだろう。というか時間足りない

1050:さあ

Challenge Phase:何か危機を察知したので何もしてない
System Test:とおる

112.15 + 0 + 0 + 0 = 112.15(447th)
Rating:1684->1659(-25)

意外と軽症ですんだ。最近基本的に微減して上がるときはそれなりにあがることを続けている。