zoukankan      html  css  js  c++  java
  • HDU 5234 背包。

    J - 10
    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

    Description

    Today is Gorwin’s birthday. So her mother want to realize her a wish. Gorwin says that she wants to eat many cakes. Thus, her mother takes her to a cake garden. 

    The garden is splited into n*m grids. In each grids, there is a cake. The weight of cake in the i-th row j-th column is ${w_{ij}}$ kilos, Gorwin starts from the top-left(1,1) grid of the garden and walk to the bottom-right(n,m) grid. In each step Gorwin can go to right or down, i.e when Gorwin stands in (i,j), then she can go to (i+1,j) or (i,j+1) (However, she can not go out of the garden). 

    When Gorwin reachs a grid, she can eat up the cake in that grid or just leave it alone. However she can’t eat part of the cake. But Gorwin’s belly is not very large, so she can eat at most K kilos cake. Now, Gorwin has stood in the top-left grid and look at the map of the garden, she want to find a route which can lead her to eat most cake. But the map is so complicated. So she wants you to help her.

    Input

    Multiple test cases (about 15), every case gives n, m, K in a single line. 

    In the next n lines, the i-th line contains m integers ${w_{i1}},{w_{i{ m{2}}}},{w_{i3}}, cdots {w_{im}}$ which describes the weight of cakes in the i-th row 

    Please process to the end of file. 

    [Technical Specification] 

    All inputs are integers. 

    1<=n,m,K<=100 

    1<=${w_{ij}}$<=100 

    Output

    For each case, output an integer in an single line indicates the maximum weight of cake Gorwin can eat.

    Sample Input

    1 1 2
    3
    2 3 100
    1 2 3
    4 5 6

    Sample Output

    0
    16
    
    
            
     

    Hint

     
    In the first case, Gorwin can’t eat part of cake, so she can’t eat any cake. In the second case, Gorwin walks though below route (1,1)->(2,1)->(2,2)->(2,3). When she passes a grid, she eats up the cake in that grid. Thus the total amount cake she eats is 1+4+5+6=16.
     
    思路:动态转移方程  dp[i][j][l] = max(dp[i][j-1][l], dp[i-1][j][l], dp[i][j-1][l-a[i][j]]+a[i][j], dp[i-1][j][l-a[i][j]]+a[i][j]);
     
    代码:
     

    #include<stdio.h>
    #include<string.h>
    #include<math.h>

    #define max(a, b)(a > b ? a : b)
    #define N 106
    int dp[N][N][N];
    int a[N][N];


    int main()
    {
    int i, j, n, m, k, l, aa, b, c, d;

    while(scanf("%d%d%d", &n, &m, &k) != EOF)
    {
    memset(dp, 0, sizeof(dp));

    for(i = 1; i <= n; i++)
    for(j = 1; j <= m; j++)
    scanf("%d", &a[i][j]);

    for(i = 1; i <= n; i++)
    for(j = 1; j <= m; j++)
    for(l = 0; l <= k; l++)
    {
    aa = b = c= d;

    aa = dp[i][j-1][l];
    b = dp[i-1][j][l];

    if(l >= a[i][j])//如果物品的体积小于等于当前背包的体积,。
    {
    c = dp[i][j-1][l-a[i][j]]+a[i][j];//放入后上边物品的价值。
    d = dp[i-1][j][l-a[i][j]]+a[i][j];//放入后左边物品的价值。

    dp[i][j][l] = max(max(aa, b),max(c, d));

    }
    else//如果物品的体积大于当前背包的体积, 就不放, 判断左边的点和上边的点那个大。
    dp[i][j][l] = max(aa, b);
    }
    printf("%d ", dp[n][m][k]);

    }
    return 0;
    }

  • 相关阅读:
    一次关于聚合根的激烈讨论
    基于 abp vNext 和 .NET Core 开发博客项目
    PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型
    DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下
    DOCKER 学习笔记8 Docker Swarm 集群搭建
    DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
    DOCKER 学习笔记6 WINDOWS版尝鲜
    DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排
    DOCKER 学习笔记4 认识DockerCompose 多容器编排
    DOCKER 学习笔记3 使用Docker部署SpringBoot
  • 原文地址:https://www.cnblogs.com/dll6/p/5778928.html
Copyright © 2011-2022 走看看