[HDU1176]免费馅饼(DP)

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1176

题解

DP。因为起点固定,终点随意,所以从终点到起点的顺序dp。

代码

import java.util.Scanner;

public class FreePie {
	static final int MAXT=100005;
	static final int MAXLEN=10;
	
	public static void main(String args[]) {
		Scanner in=new Scanner(System.in);
		while(in.hasNext()){
			int[][] pie=new int[MAXT][MAXLEN+1];
			int n=in.nextInt();
			if(n==0) {
				break;
			}
			
			int maxT=Integer.MIN_VALUE;
			while(n--!=0) {
				int x=in.nextInt();
				int t=in.nextInt();
				++pie[t][x];
				maxT=t>maxT?t:maxT;
			}
			
			int maxPie=maxPieCnt(pie,maxT);
			System.out.println(maxPie);
		}
		in.close();
	}
	
	public static int maxPieCnt(int pie[][],int maxT) {
		int[][] dp=new int[maxT+1][MAXLEN+1];
		for(int j=0;j<=MAXLEN;++j) {//
			dp[maxT][j]=pie[maxT][j];
		}
		for(int i=maxT-1;i>=0;--i) {//
			for(int j=0;j<=MAXLEN;++j) {
				if(j==0) {
					dp[i][j]=Math.max(dp[i+1][j], dp[i+1][j+1])+pie[i][j];
				}
				else if(j==MAXLEN) {
					dp[i][j]=Math.max(dp[i+1][j-1], dp[i+1][j])+pie[i][j];
				}
				else {
					dp[i][j]=Math.max(dp[i+1][j-1],Math.max(dp[i+1][j],dp[i+1][j+1]))+pie[i][j];
				}
			}
		}
		return dp[0][5];
	}
}

posted on 2019-06-05 22:25  coding_gaga  阅读(105)  评论(0编辑  收藏  举报

导航