[HDU1176]免费馅饼(DP)

Posted coding-gaga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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];
    

以上是关于[HDU1176]免费馅饼(DP)的主要内容,如果未能解决你的问题,请参考以下文章

HDU1176 免费馅饼 —— DP

HDU 1176 免费馅饼:dp

hdu 1176 免费馅饼(DP)

HDU 1176-免费馅饼(DP_逆推)

hdu 1176 免费馅饼

HDU-1176-免费馅饼(DP)