- 10
- 0
- 约1.5万字
- 约 50页
- 2017-03-04 发布于湖北
- 举报
* 首先,我们要找到这个问题中的“状态”是什么? 因此为了求出到达当前格子后最多能收集到多少个苹果,我们就要先去考察那些能到达当前这个格子的格子,到达它们最多能收集到多少个苹果。 (是不是有点绕,但这句话的本质其实是DP的关键:欲求问题的解,先要去求子问题的解) * S[i][j]有两种计算方式:1.对于每一行,从左向右计算,然后从上到下逐行处理;2. 对于每一列,从上到下计算,然后从左向右逐列处理。这样做的目的是为了在计算S[i][j]时,S[i-1][j]和S[i][j-1]都已经计算出来了。 * 需要应用搜索算法求解 输入输出样例 【输入样例】 1000 5 800 2 400 5 300 5 400 3 200 2 【输出样例】 3900 分析 这是一个有微小变化的01背包问题 总钱数N可看做背包的容量,物品的价格可看作物品的重量。 优化目标:在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。 状态转移方程如下: f[i,j]=max{f[i-1,j-vi]+vi*pi(j=wi),f[i-1,j]} 主要程序段 for(i=0;in;i++) f[0][i]=0;//初始化最大价值数组的第0行; for(i=1;im;i++) for(j=0;jn;j++) { f[i][j]=f[i-1][j]; if ((j=v[
原创力文档

文档评论(0)