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

    SGU_104

        我们可以用f[i][j]、p[i][j]分别表示第i行扫描第j个瓶子时的最大值以及取得这个最大值时第i行的花放到了哪个瓶子中。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 110
    #define INF 0x3fffffff
    int F, V, f[MAXD][MAXD], v[MAXD][MAXD], p[MAXD][MAXD];
    void printpath(int i, int j)
    {
    if(i != 1)
    {
    printpath(i - 1, p[i][j] - 1);
    printf(" %d", p[i][j]);
    }
    else
    printf("%d", p[i][j]);
    }
    void solve()
    {
    int i, j, k;
    for(i = 1; i <= F; i ++)
    for(j = 1; j <= V; j ++)
    scanf("%d", &v[i][j]);
    memset(f, 0xc1, sizeof(f));
    for(i = 1; i <= V; i ++)
    {
    f[1][i] = f[1][i - 1];
    p[1][i] = p[1][i - 1];
    if(v[1][i] > f[1][i])
    {
    f[1][i] = v[1][i];
    p[1][i] = i;
    }
    }
    for(i = 2; i <= F; i ++)
    for(j = i; j <= V; j ++)
    {
    f[i][j] = f[i][j - 1];
    p[i][j] = p[i][j - 1];
    if(v[i][j] + f[i - 1][j - 1] > f[i][j])
    {
    f[i][j] = v[i][j] + f[i - 1][j - 1];
    p[i][j] = j;
    }
    }
    printf("%d\n", f[F][V]);
    printpath(F, V);
    printf("\n");
    }
    int main()
    {
    while(scanf("%d%d", &F, &V) == 2)
    {
    solve();
    }
    return 0;
    }


  • 相关阅读:
    单词接龙
    洛谷 P1015 回文数
    洛谷 P1012 拼数
    codevs 2780 ZZWYYQWZHZ
    专项练习之字符串
    模拟题1
    专项训练之线段树
    复习题之求后序遍历
    复习题之二叉树的遍历
    Hdu 3037 Saving Beans(Lucus定理+乘法逆元)
  • 原文地址:https://www.cnblogs.com/staginner/p/2287410.html
Copyright © 2011-2022 走看看