zoukankan      html  css  js  c++  java
  • tyvj1124花店橱窗——有限制的DP

    题目:http://www.joyoi.cn/problem/tyvj-1124

    此题首先注意一束花能往哪些花瓶中放置:原本应放在本位置,但因为有多余花瓶,故可以有些变动,范围在i~i+v-f间;

    假设选择此花瓶,则对其上一束花的摆放位置有要求:放在此花瓶之前;故再用k循环一遍;

    输出路径在上一步中记录,只需以角标记录此花这种摆放方式对应的上一束花的摆放位置,递归输出即可。

    代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int f,v,w[105][105],path[105][105],dp[105][105],ans,p;
    void print(int i,int j)
    {
    	if(!i)return;
    	print(i-1,path[i][j]);
    	printf("%d ",j);
    }
    int main()
    {
    	scanf("%d%d",&f,&v);
    	for(int i=1;i<=f;i++)
    		for(int j=1;j<=v;j++)
    			scanf("%d",&w[i][j]);
    	for(int i=1;i<=f;i++)
    	{
    		int up=i+v-f;
    		for(int j=i;j<=up;j++)
    		{
    			dp[i][j]=dp[i-1][i-1]+w[i][j];//!
    			path[i][j]=i-1;//!
    			for(int k=i;k<j;k++)//不能k=i-1! 
    			{
    				if(dp[i][j]<dp[i-1][k]+w[i][j])
    				{
    					dp[i][j]=dp[i-1][k]+w[i][j];
    					path[i][j]=k;
    				}
    			}
    		}
    	}
    	for(int i=f;i<=v;i++)
    	{
    		if(dp[f][i]>ans)
    		{
    			ans=dp[f][i];
    //			p=path[f][i];
    			p=i;
    		}
    	}
    	printf("%d
    ",ans);
    	print(f,p);
    	return 0;
    }
    

      

  • 相关阅读:
    python安装
    实现node服务器
    VSCode集成tomcat及使用方法
    CommonJS规范
    Bootstrap 笔记
    vue笔记
    jgGrid模板添加
    vue组件中的data
    解析DNS
    StaticResource
  • 原文地址:https://www.cnblogs.com/Zinn/p/8457552.html
Copyright © 2011-2022 走看看