• HDU_1176 免费馅饼(DP)


    /*拿到这题首先想到的转移方程就是 :

    dp[i][j] = max(dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]) + dp[i][j];

    不过这题如果从time = 0开始往下分的话,会很复杂。可以
    采用类似数塔的理想,从下往上推。转移方程是 :

    dp[i][j] = max(dp[i+1][j], dp[i+1][j-1], dp[i+1][j+1]) + dp[i][j];

    注意考虑position = 0 和 position = 10的情况。

    My Code:
    */

    #include <iostream>
    #include <cstdio>
    #include <cstring>

    using namespace std;

    const int N = 100003;

    int num[N][12];

    int main(){
    //freopen("data.in", "r", stdin);

    int n, i, j, m, t, maxt;
    while(scanf("%d", &n), n){
    memset(num, 0, sizeof(num));
    maxt = 0;
    while(n--){
    scanf("%d%d", &m, &t);
    num[t][m]++;
    if(maxt < t)
    maxt = t;
    }

    for(i = maxt; i >= 0; i--){
    num[i][0] += max(num[i+1][0], num[i+1][1]);
    num[i][10] += max(num[i+1][10], num[i+1][9]);

    for(j = 1; j <= 9; j++){
    num[i][j] += max(num[i+1][j], max(num[i+1][j+1], num[i+1][j-1]));
    }
    }
    printf("%d\n", num[0][5]);
    }
    return 0;
    }



  • 相关阅读:
    操作系统简介
    计算机基础
    Django之form
    CMDB资产采集
    Git
    User model
    多级评论
    个人主页
    media路径设置
    Web框架
  • 原文地址:https://www.cnblogs.com/vongang/p/2195556.html
Copyright © 2020-2023  润新知