• 花店


    Description

    假设你想以最美观的方式布置花店的橱窗。现在你有F束不同品种的花束,同时你也有至少同样数量的花瓶被按顺序摆成一行。这些花瓶的位置固定于架子上,并从1至V顺序编号,V是花瓶的数目,从左至右排列,则最左边的是花瓶1,最右边的是花瓶V。花束可以移动,并且每束花用1至F间的整数唯一标识。标识花束的整数决定了花束在花瓶中的顺序,如果I<J,则令花束I必须放在花束J左边的花瓶中。你必须在保持花束顺序的前提下,使花束的摆放取得最大的美学值。

    Analysis

    对于花瓶i,花束j而言有两种情况。

    1. 放,则dp[i][j]=dp[i-1][j-1]+s[i][j]
    2. 不放,则dp[i][j]=dp[i-1][j]

    动规可行性判断:

    • 最优子结构:之前的花摆放美学值最大才能使之后的状态最优
    • 无后效性:做出选择后并不会妨碍之后花束的放置。
    dp[i][j]=max(dp[i-1][j-1]+s[i][j],dp[i-1][j])
    

    Code

    #include <bits/stdc++.h>
    
    int n,m,beauty[101][101],dp[101][101];
    
    int main()
    {
    	freopen("test.in","r",stdin);
    	freopen("test.out","w",stdout);
    	std::cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
    		std::cin>>beauty[j][i];
    	for(int i=0;i<=m;i++)
    	for(int j=1;j<=n;j++)
    		dp[i][j]=-10000;
    	for(int i=1;i<=m;i++)
    	for(int j=1;j<=n;j++)
    		dp[i][j]=std::max(dp[i-1][j],dp[i-1][j-1]+beauty[i][j]);
    	std::cout<<dp[m][n]<<std::endl;
    	return 0;
    }
    
  • 相关阅读:
    TestMap HashMap的常见操作
    三种方式遍历一颗二叉树
    jmeter 5.1.1版本 进行抓包的时候弹出输入密码
    浅谈Java中的AOP面向切面的变成和控制反转IOC
    rpc测试框架
    SpringBoot下,@WebFilter配置获取日志
    某些测试工具
    Google的三大马车
    关于Mock的一些网站
    用Jmeter做性能测试,之后报表展示
  • 原文地址:https://www.cnblogs.com/qswx/p/9492435.html
Copyright © 2020-2023  润新知