zoukankan      html  css  js  c++  java
  • Little shop of flowers

    题目大意:把 M 朵花插入 N 个花瓶中,每个花插入不同的花瓶都有一个价值A[Mi][Nj],要使所有的花都插入花瓶,求出来最大的总价值(花瓶为空时价值是0)。

    分析:dp[i][j]表示前i朵花插入前j个花瓶的最大价值,那么比较容易看出 dp[i][j] = max(dp[i][j-1], dp[i][j-1]+A[i][j]),也就是这个花瓶要还是不要,别忘记输出路径。

    代码如下:

    ========================================================================================================================================

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    const int MAXN = 107;
    const int oo = 1e9+7;
    
    int dp[MAXN][MAXN];
    int A[MAXN][MAXN];
    
    void Path(int x, int y, int M)
    {
        if(x == 0)
            return ;
    
        if(dp[x][y] == dp[x][y-1])
            Path(x, y-1, M);
        else
        {
            Path(x-1, y-1, M);
            printf("%d%c", y, x==M ? '
    ':' ');
        }
    }
    
    int main()
    {
        int M, N;///M朵花,N个花瓶
    
        scanf("%d%d", &M, &N);
    
        for(int i=1; i<=M; i++)
        for(int j=1; j<=N; j++)
            scanf("%d", &A[i][j]);
    
        for(int i=1; i<=M; i++)
            dp[i][0] = -oo;
    
        for(int i=1; i<=M; i++)
        for(int j=1; j<=N; j++)
        {
            dp[i][j] = max(dp[i][j-1], dp[i-1][j-1]+A[i][j]);
        }
    
        printf("%d
    ", dp[M][N]);
    
        Path(M, N, M);
    
        return 0;
    }
  • 相关阅读:
    模板层
    视图层
    路由层
    图书管理系统
    orm基础
    django目录结构介绍
    django基础
    20145211 《Java程序设计》第1周学习总结——小荷才露尖尖角
    实迷途其未远,觉今是而昨非——问卷调查
    20145203盖泽双问卷调查
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4806443.html
Copyright © 2011-2022 走看看