poj 1157 LITTLE SHOP OF FLOWERS dp

简介:

几个月没碰过算法,现在完全不会了。

再过几周就要考试了,抓紧时间恢复一下


这是个简单dp,之前一直以不会dp为借口躲避这些题目,其实就是太懒了不想想。但是逃避总是逃不过的,于是恢复训练就从dp开始

注意这题每个花都必须要取到,之前这一点错了很多次

简单可以写出这样的dp代码

</pre><pre name="code" class="cpp">#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
int F,V;
int org[105][105];
int dp[105][105];
int main()
{
    //freopen("1.txt","r",stdin);
    while(~scanf("%d%d",&F,&V))
    {
        int i,j;
        memset(org,0,sizeof(org));
        memset(dp,0,sizeof(dp));
        for(i=1;i<=F;i++)
            for(j=1;j<=V;j++)
            {
                scanf("%d",&org[i][j]);
            }
        dp[1][0]=org[1][1];
        for(i=1;i<=F;i++){
            for(j=i;j<=V;j++){
                dp[i][j]=org[i][j]+dp[i-1][j-1];
                if(j!=i)dp[i][j]=max(dp[i][j-1],dp[i][j]);
            }
        }
        printf("%d\n",dp[F][V]);
    }
}

发现实际上dp数组只用了两行,于是循环数组优化

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
int F,V;
int org[105][105];
int dp[2][105];
int main()
{
	//freopen("1.txt","r",stdin);
	while(~scanf("%d%d",&F,&V))
	{
		int i,j;
		memset(org,0,sizeof(org));
		memset(dp,0,sizeof(dp));
		for(i=1;i<=F;i++)
			for(j=1;j<=V;j++)
			{
				scanf("%d",&org[i][j]);
			}
		dp[0][0]=org[1][1];
		bool flag=0;
		for(i=1;i<=F;i++){
			for(j=i;j<=V;j++){
				dp[flag][j]=org[i][j]+dp[!flag][j-1];
				if(j!=i)dp[flag][j]=max(dp[flag][j-1],dp[flag][j]);
			}
			flag=!flag;
		}
		printf("%d\n",dp[!flag][V]);
	}
}

到此为止?显然不。两次循环明显可以合并

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
int F,V;
int dp[2][105];
int main()
{
	//freopen("1.txt","r",stdin);
	while(~scanf("%d%d",&F,&V))
	{
		int i,j;
		memset(dp,0,sizeof(dp));
		bool flag=0;
		int t;
		for(i=1;i<=F;i++){
			for(j=1;j<=V;j++){
				scanf("%d",&t);
				dp[flag][j]=t+dp[!flag][j-1];
				if(j>i)dp[flag][j]=max(dp[flag][j-1],dp[flag][j]);
			}
			flag=!flag;
		}
		printf("%d\n",dp[!flag][V]);
	}
}

Any More? 当然,因为实际上状态转移只用了两个数加上一行。但是这时的代码已经不好理解了

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
int F,V;
int dp[105];
int main()
{
	//freopen("1.txt","r",stdin);
	while(~scanf("%d%d",&F,&V))
	{
		int i,j,t,last,now;
		memset(dp,0,sizeof(dp));
		for(i=1;i<=F;i++){
			for(j=1;j<=V;j++){
				scanf("%d",&t);
				now=t+dp[j-1];
				if(j>i)now=max(last,now);
				dp[j-1]=last;last=now;
			}
		}
		printf("%d\n",now);
	}
}

还有吗?实际上用的真的是两个数加一行吗?显然不是,还可以更加简化,不多都是常数上的了,而且代码更加难以理解,就不写了

目录
相关文章
|
存储 安全 区块链
基于区块链技术的数字身份认证系统设计与实现
传统的身份认证系统存在着诸多安全和隐私风险,而基于区块链技术的数字身份认证系统则具有去中心化、不可篡改的特点。本文将探讨如何利用区块链技术设计和实现一套安全可靠的数字身份认证系统,以及其在实际应用中的潜力和挑战。
1433 12
|
11月前
|
Linux Python Windows
Matplotlib 中设置自定义中文字体的正确姿势
【11月更文挑战第16天】Matplotlib 默认不支持中文字体显示,需手动配置。方法包括:1) 修改全局字体设置,适用于整个脚本;2) 局部设置特定元素的字体;3) 使用系统字体名称,但可能因系统而异。通过这些方法可以有效解决中文乱码问题,确保图表中文本的正确显示。
916 3
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
202 9
|
JavaScript 前端开发 Java
v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例
这篇文章详细阐述了Vue中`v-if`和`v-show`指令的共同点、区别、使用场景以及它们在组件和普通元素上附属时的不同表现,并通过示例展示了状态改变时对钩子函数调用的影响。
v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例
|
存储 机器学习/深度学习 Java
Java中 数组的定义与使用
Java中 数组的定义与使用
236 0
Java中 数组的定义与使用
|
前端开发 Oracle 搜索推荐
Spring框架与SpringBoot的关联与区别(1)
Spring框架与SpringBoot的关联与区别
315 0
|
前端开发 程序员
花好月圆时,邀你一起来读诗!
花好月圆时,邀你一起来读诗!
262 0
|
NoSQL JavaScript 前端开发
Spring Boot3.0升级,踩坑之旅,附解决方案(二)
项目中使用了 com.github.whvcse包的easy-captcha 验证码依赖,升级至Jdk17后,验证码接口报错:Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null,错误原因很明显脚本引擎执行脚本语句报错,因为执行引擎为空。查询相关资料Jdk8自带的JavaScript引擎 nashorn 再升级到Jdk9后就被移除了,从而导致报错
1310 0
Spring Boot3.0升级,踩坑之旅,附解决方案(二)
|
网络协议 安全 关系型数据库
性能测试 CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据
性能测试 CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据
178 0
|
前端开发 测试技术 API
04 埋点测试实战之诸葛IO
04 埋点测试实战之诸葛IO