码迷,mamicode.com
首页 > 其他好文 > 详细

[HDU1176]免费馅饼(DP)

时间:2019-06-06 00:09:45      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:next   problem   free   turn   show   util   n+1   ==   ret   

题目链接

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)

标签:next   problem   free   turn   show   util   n+1   ==   ret   

原文地址:https://www.cnblogs.com/coding-gaga/p/10982340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!