题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2385
一维DP。
题意简述:两棵苹果树,在t时间内,分别在一棵树上某时刻会掉苹果,农夫可以选择在哪棵树下接苹果,当然农夫可以在两树间移动,但移动的次数限制为w,对于给定的t,w和落苹果的相关信息,求农夫能接到的苹果最大数。
分析:
先看看数据输入:
7 2
2 1 1 2 2 1 1
可以压缩进行一些优化,压缩后变为 2(1) 1(2) 2(2) 1(2).
上面表示一个连在一起的1或2在此之间就没必要转移(此决策稍微思考就能理解),所以上面压缩可表示为,一个阶段在哪棵树上掉苹果,并且还带掉苹果的数目。
确定状态:dp[i]转移i次能得到的最大苹果值。
状态转移:dp[i]=min(dp[i],dp[i-1])+value();
上面是DD牛写的背包九讲里面的第一讲(将01背包空间降维)的方法,还值得注意的是此题不要人工确定农夫的位置,可通过转移次数去确定。
下面就是代码: