HDU 1176 逆向dp very easy~

HDU1176 免费馅饼

这好像是我写的第一道kuangbin专题里的题,当时能力不够,只简单理解了一下”塔数“的概念
今天看了别人的题解,才系统地理解了一下
以后有一个小要求,代码一定要标准,代码风格要好一点,最近看别人的题解,发现有的人代码写得不是很好理解,可能他们有自己的思路吧

不知道是不是HDU不接受输入加速优化,加了那三行优化就会WA,而且POJ是不可以用万能头的,跟CF有点不一样
昨晚的CF,用了ISO优化也WA了,改成scanf就好了,不知道是为什么,看来以后还是要用scanf?

这篇题解是在CSDN上学的,代码也是学习来的,HDU上有人的代码只需要15ms,想看看是怎么写的,但是HDU的代码好像不公开

对于这个pile[N][12],记录的是在某一时间t内,在某一坐标上掉下的馅饼数量x
可以知道下一次能够接到的馅饼数是pile[t+1][x]或者pile[t+1][x-1],或者pile[t+1][x+1]
用逆向的dp,最后回到第0秒时,站在x=5处的dp[0][5];

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int pile[N][12];
int dp[N][12];
int n,x,t,maxt;
int trimax(int a,int b,int c){
    return max(a,max(b,c));
}
int main(){
    while(scanf("%d",&n)!=EOF&&n){
            maxt=0;//*
            memset(dp,0,sizeof(dp));//*
            memset(pile,0,sizeof(pile));//*
        while(n--){
            scanf("%d %d",&x,&t);
            pile[t][x]++;
            maxt=max(maxt,t);
        }
    for(int i=0;i<11;i++)//*
        dp[maxt][i]=pile[maxt][i];

    for(int i=maxt-1;i>=0;i--){
        for(int j=0;j<11;j++){
            if(j==0) dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+pile[i][j];
            else dp[i][j]=trimax(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+pile[i][j];
        }
    }
    printf("%d",dp[0][5]);
}
    return 0;
}

原文地址:https://www.cnblogs.com/guaguastandup/p/10346241.html

时间: 2024-08-07 09:07:16

HDU 1176 逆向dp very easy~的相关文章

HDU 1176 经典dp

记录最晚时间 从time为2枚举到最晚时间 每个时间段的x轴节点都等于上一个时间段的可触及的最大馅饼数 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; int dp[100050][11]; int a[100050][11]; void init() { memset(a,0,

免费馅饼 (hdu 1176 简单DP)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28519    Accepted Submission(s): 9737 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的1

HDU 1176免费馅饼 DP数塔问题转化

L - 免费馅饼 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1176 Appoint description:  prayerhgq  (2015-07-28) System Crawler  (2015-11-21) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.

HDU 1176 免费馅饼 (DP)

题目链接:HDU 1176 免费馅饼 中文题. dp[i][j]表示第i秒在j位置得到最大的馅饼数,右边1步,左边1步,原地不动三个状态转移过来. 状态转移方程:dp[i][j]=max(dp[i+1][j],max(dp[i+1][j+1],dp[i+1][j-1]))+mp[i][j]; AC代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; con

hdu 1176 免费馅饼 (dp 数塔类型)

免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25712    Accepted Submission(s): 8760 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的1

[2016-03-29][HDU][1176][免费馅饼]

时间:2016-03-29 09:46:34 星期二 题目编号:[2016-03-29][HDU][1176][免费馅饼] #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int maxt = 100000 + 10; int dp[maxt][11]; int a[maxt][11]; int main(){ int n,x,t,maxT; whi

hdu 4352 数位dp(最长上升子序列的长度为k的个数)

http://acm.hdu.edu.cn/showproblem.php?pid=4352 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the entire description is very important. As the strongest fighting force in UESTC, xhxj grew

hdu 4352 数位dp + 状态压缩

XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2265    Accepted Submission(s): 927 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then careful

G - 免费馅饼 HDU 1176 (动态规划---数塔的变形 )

G - 免费馅饼 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1176 Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接.但由