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

    每个花按序号顺序放到窗口,不同窗口可有不同观赏值,所有花都要放上去,求最大观赏值和花的位置。

    分析

    dp,dp[i][j]表示前i朵花最后一朵在j位置的最大总观赏值。

    dp[i][j]=max(dp[i-1][k]+f[i][j])

    代码

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=105;
    int n,w,ans=-99999;
    int dp[N][N],f[N][N],last[N][N],ansp[N];
    int main()
    {
    
        scanf("%d%d",&n,&w);
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=w; j++)
            {
                scanf("%d",&f[i][j]);
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=i; j<=w-n+i; j++)
            {
                dp[i][j]=dp[i-1][i-1]+f[i][i];
                for(int k=i-1; k<j; k++)
                {
                    if(dp[i-1][k]+f[i][j]>dp[i][j])
                    {
                        dp[i][j]=dp[i-1][k]+f[i][j];
                        last[i][j]=k;
                    }
                }
                if(i==n && dp[n][j]>ans)
                {
                    ans=dp[n][j];
                    ansp[n]=j;
                }
            }
        }
        int k=ansp[n];
        for(int i=n; i>0; i--)
        {
            k=last[i][k];
            ansp[i-1]=k;
        }
        printf("%d
    ",ans);
        for(int i=1; i<=n; i++)
            printf("%d ",ansp[i]);
        return 0;
    }
  • 相关阅读:
    WordCount结对项目
    第一周作业:一些感想
    第一次作业
    Spring Cloud 微服务实战笔记
    解决jest处理es模块
    领域驱动设计(DDD:Domain-Driven Design)
    测试
    whistle
    日记(2018-11-07)
    ubuntu中使用机密数据Secrets
  • 原文地址:https://www.cnblogs.com/flipped/p/5226336.html
Copyright © 2011-2022 走看看