您的位置:首页 > 其它

HDU 1176 免费馅饼

2021-05-20 07:57 225 查看

链接

免费馅饼 - http://acm.hdu.edu.cn/showproblem.php?pid=1176

分析

  • 模型 - 横轴为位置,纵轴为时间;初始位置为红色,馅饼分布在网格中。 动态问题静态化
  • 图中蓝色的馅饼接不到
  • 虚线范围内的都能接到
  • 状态及分类 设向右移动为1,向左移动为-1,不动为0,则 { … , 1 , … , − 1 , … , 0 , … ⏞ T 个 } \{\overbrace{…,1,…,-1,…,0,…}^{T个}\} {…,1,…,−1,…,0,… ​T个​}为T秒末的状态
  • (T, X)表示T秒末在X位置上,这表示了一类状态
  • 末状态可以分为11类
  • 递推

      到哪里去?

      无法空间优化
    • 具体过程
      ( 0 , 5 ) ⇒ (0,5)\Rightarrow (0,5)⇒ ( 1 , 4 ) 、 ( 1 , 5 ) 、 ( 1 , 6 ) ⇒ (1,4)、(1,5)、(1,6)\Rightarrow (1,4)、(1,5)、(1,6)⇒ ( 2 , 3 ) 、 ( 2 , 4 ) 、 ( 2 , 5 ) 、 ( 2 , 6 ) 、 ( 2 , 7 ) ⇒ (2,3)、 (2,4)、(2,5)、(2,6)、(2,7)\Rightarrow (2,3)、(2,4)、(2,5)、(2,6)、(2,7)⇒ ( 3 , 2 ) 、 ( 3 , 3 ) 、 ( 3 , 4 ) 、 ( 3 , 5 ) 、 ( 3 , 6 ) 、 ( 3 , 7 ) 、 ( 3 , 8 ) ⇒ (3,2)、 (3,3)、 (3,4)、(3,5)、(3,6)、(3,7)、(3,8)\Rightarrow (3,2)、(3,3)、(3,4)、(3,5)、(3,6)、(3,7)、(3,8)⇒ ( 4 , 1 ) 、 ( 4 , 2 ) 、 ( 4 , 3 ) 、 ( 4 , 4 ) 、 ( 4 , 5 ) 、 ( 4 , 6 ) 、 ( 4 , 7 ) 、 ( 4 , 8 ) 、 ( 4 , 9 ) ⇒ (4,1)、(4,2)、 (4,3)、 (4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)\Rightarrow (4,1)、(4,2)、(4,3)、(4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)⇒ ( 5 , 0 ) 、 ( 5 , 1 ) 、 ( 5 , 2 ) 、 ( 5 , 3 ) 、 ( 5 , 4 ) 、 ( 5 , 5 ) 、 ( 5 , 6 ) 、 ( 5 , 7 ) 、 ( 5 , 8 ) 、 ( 5 , 9 ) 、 ( 5 , 10 ) ⇒ (5,0)、(5,1)、(5,2)、 (5,3)、 (5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)\Rightarrow (5,0)、(5,1)、(5,2)、(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)⇒ … … …… ……
  • 从哪里来?

      空间可优化,但边界处理复杂
    • 顺序
      ( 0 , 5 ) ⇒ \xcancel{(0,5)\Rightarrow} (0,5)⇒ ​ ( 1 , 4 ) 、 ( 1 , 5 ) 、 ( 1 , 6 ) ⇒ (1,4)、(1,5)、(1,6)\Rightarrow (1,4)、(1,5)、(1,6)⇒ ( 2 , 3 ) 、 ( 2 , 4 ) 、 ( 2 , 5 ) 、 ( 2 , 6 ) 、 ( 2 , 7 ) ⇒ (2,3)、 (2,4)、(2,5)、(2,6)、(2,7)\Rightarrow (2,3)、(2,4)、(2,5)、(2,6)、(2,7)⇒ ( 3 , 2 ) 、 ( 3 , 3 ) 、 ( 3 , 4 ) 、 ( 3 , 5 ) 、 ( 3 , 6 ) 、 ( 3 , 7 ) 、 ( 3 , 8 ) ⇒ (3,2)、 (3,3)、 (3,4)、(3,5)、(3,6)、(3,7)、(3,8)\Rightarrow (3,2)、(3,3)、(3,4)、(3,5)、(3,6)、(3,7)、(3,8)⇒ ( 4 , 1 ) 、 ( 4 , 2 ) 、 ( 4 , 3 ) 、 ( 4 , 4 ) 、 ( 4 , 5 ) 、 ( 4 , 6 ) 、 ( 4 , 7 ) 、 ( 4 , 8 ) 、 ( 4 , 9 ) ⇒ (4,1)、(4,2)、 (4,3)、 (4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)\Rightarrow (4,1)、(4,2)、(4,3)、(4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)⇒ ( 5 , 0 ) 、 ( 5 , 1 ) 、 ( 5 , 2 ) 、 ( 5 , 3 ) 、 ( 5 , 4 ) 、 ( 5 , 5 ) 、 ( 5 , 6 ) 、 ( 5 , 7 ) 、 ( 5 , 8 ) 、 ( 5 , 9 ) 、 ( 5 , 10 ) ⇒ (5,0)、(5,1)、(5,2)、 (5,3)、 (5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)\Rightarrow (5,0)、(5,1)、(5,2)、(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)⇒ … … …… ……
    • 末位置看成初始位置 11个初始位置能对应11类末状态
    • 末位置在原初始位置的那些路径与原始问题的路径一一对应
    • 从哪里来? 空间可优化,代码简洁
    • 递推过程
      ( 0 , 0 ) 、 ( 0 , 1 ) 、 ( 0 , 2 ) 、 ( 0 , 3 ) 、 ( 0 , 4 ) 、 ( 0 , 5 ) 、 ( 0 , 6 ) 、 ( 0 , 7 ) 、 ( 0 , 8 ) 、 ( 0 , 9 ) 、 ( 0 , 10 ) (0,0)、(0,1)、(0,2)、 (0,3)、 (0,4)、\color{red}{(0,5)}\color{black}{、(0,6)、(0,7)、(0,8)、(0,9)、(0,10)} (0,0)、(0,1)、(0,2)、(0,3)、(0,4)、(0,5)、(0,6)、(0,7)、(0,8)、(0,9)、(0,10) ( 1 , 0 ) 、 ( 1 , 1 ) 、 ( 1 , 2 ) 、 ( 1 , 3 ) 、 ( 1 , 4 ) 、 ( 1 , 5 ) 、 ( 1 , 6 ) 、 ( 1 , 7 ) 、 ( 1 , 8 ) 、 ( 1 , 9 ) 、 ( 1 , 10 ) ⇑ (1,0)、(1,1)、(1,2)、 (1,3)、 (1,4)、(1,5)、(1,6)、(1,7)、(1,8)、(1,9)、(1,10)\Uparrow (1,0)、(1,1)、(1,2)、(1,3)、(1,4)、(1,5)、(1,6)、(1,7)、(1,8)、(1,9)、(1,10)⇑ ( 2 , 0 ) 、 ( 2 , 1 ) 、 ( 2 , 2 ) 、 ( 2 , 3 ) 、 ( 2 , 4 ) 、 ( 2 , 5 ) 、 ( 2 , 6 ) 、 ( 2 , 7 ) 、 ( 2 , 8 ) 、 ( 2 , 9 ) 、 ( 2 , 10 ) ⇑ (2,0)、(2,1)、(2,2)、 (2,3)、 (2,4)、(2,5)、(2,6)、(2,7)、(2,8)、(2,9)、(2,10)\Uparrow (2,0)、(2,1)、(2,2)、(2,3)、(2,4)、(2,5)、(2,6)、(2,7)、(2,8)、(2,9)、(2,10)⇑ ( 3 , 0 ) 、 ( 3 , 1 ) 、 ( 3 , 2 ) 、 ( 3 , 3 ) 、 ( 3 , 4 ) 、 ( 3 , 5 ) 、 ( 3 , 6 ) 、 ( 3 , 7 ) 、 ( 3 , 8 ) 、 ( 3 , 9 ) 、 ( 3 , 10 ) ⇑ (3,0)、(3,1)、(3,2)、 (3,3)、 (3,4)、(3,5)、(3,6)、(3,7)、(3,8)、(3,9)、(3,10)\Uparrow (3,0)、(3,1)、(3,2)、(3,3)、(3,4)、(3,5)、(3,6)、(3,7)、(3,8)、(3,9)、(3,10)⇑ ( 4 , 0 ) 、 ( 4 , 1 ) 、 ( 4 , 2 ) 、 ( 4 , 3 ) 、 ( 4 , 4 ) 、 ( 4 , 5 ) 、 ( 4 , 6 ) 、 ( 4 , 7 ) 、 ( 4 , 8 ) 、 ( 4 , 9 ) 、 ( 4 , 10 ) ⇑ (4,0)、(4,1)、(4,2)、 (4,3)、 (4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)、(4,10)\Uparrow (4,0)、(4,1)、(4,2)、(4,3)、(4,4)、(4,5)、(4,6)、(4,7)、(4,8)、(4,9)、(4,10)⇑ ( 5 , 0 ) 、 ( 5 , 1 ) 、 ( 5 , 2 ) 、 ( 5 , 3 ) 、 ( 5 , 4 ) 、 ( 5 , 5 ) 、 ( 5 , 6 ) 、 ( 5 , 7 ) 、 ( 5 , 8 ) 、 ( 5 , 9 ) 、 ( 5 , 10 ) ⇑ (5,0)、(5,1)、(5,2)、 (5,3)、 (5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)\Uparrow (5,0)、(5,1)、(5,2)、(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(5,10)⇑ … … ⇑ ……\Uparrow ……⇑

    代码

    /* hdu 1176 免费馅饼 逆路径 从哪里来?*/
    #include <bits/stdc++.h>
    using namespace std;
    #define MXX 15
    #define MXT 100010
    int n, dp[MXT][MXX];
    int main(){
    int T, t, x;
    while(scanf("%d", &n), n){
    T = 0;
    memset(dp, 0, sizeof dp);
    for(int i = 1; i <= n; ++i){
    scanf("%d %d", &x, &t);
    dp[t][x]++;
    if(T < t) T = t;
    }
    for(int i = T; i >= 0; --i) {
    for(int j = 0; j <= 10; ++j){
    // 越界访问,但无影响
    dp[i][j] = max(dp[i+1][j-1], max(dp[i+1][j],dp[i+1][j+1]))+dp[i][j];
    }
    }
    printf("%d\n", dp[0][5]);
    }
    return 0;
    }
    /* hdu 1176 免费馅饼 逆路径 从哪里来?*/
    #include <bits/stdc++.h>
    using namespace std;
    #define MXX 17
    #define MXT 100010
    int n, dp[MXT][MXX];
    int main(){
    int T, t, x;
    while(scanf("%d", &n), n){
    T = 0;
    memset(dp, 0, sizeof dp);
    for(int i = 1; i <= n; ++i){
    scanf("%d %d", &x, &t);
    dp[t][x+1]++;
    if(T < t) T = t;
    }
    for(int i = T; i >= 0; --i) {
    for(int j = 1; j <= 11; ++j){
    dp[i][j] = max(dp[i+1][j-1], max(dp[i+1][j],dp[i+1][j+1]))+dp[i][j];
    }
    }
    printf("%d\n", dp[0][6]);
    }
    return 0;
    }
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: