题目链接
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];
}
}