关于动态规划0-1背包的算法
2017-07-14 20:29
225 查看
最近在刷OJ的时候发现有个高逼格的解决方法,特留下笔记:
题目如下:
输入参数:int*p 指向二维数组的首地址,该二维数组第0行的两个数分别表示:总钱数<30000,和希望购买物品的个数<25;
该数组从第1行到第m行(1<=j<=m)中给出了编号为j的物品的基本数据,每行有2个非负整数,
表示该物品的价格(<=10000)和该物品的重要度(1~5)。
GetResult表示不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。
不需做入参检查,测试用例可以保证~
例如:4000 8(第0行)第一行为总钱数和要买的物品数量
821 3 (第1行)
422 5
458 5
500 3
200 2
430 4
530 3
239 3
则表示 总钱数为4000,希望购买物品个数为8个,因此从第1行到第8行表示编号为j的物品的价格及物品的重要度。
void GetResult(int*p,int& Get_Result)
{
// 在这里实现功能
int money = p[0];
int num = p[1];
int value = 0;
int level = 0 ;
int i,j;
int count[30000]={0};
for(i = 1;i <= num;i++)
{
value = p[2*i];
level = p[2*i+1];
for(j = money; j>=value ;j--)
count[j] = (count[j-value] + value*level) > count[j] ? (count[j-value]+value*level) : count[j];
}
Get_Result = count[money];
}
数组的最后一位永远是最大值
题目如下:
输入参数:int*p 指向二维数组的首地址,该二维数组第0行的两个数分别表示:总钱数<30000,和希望购买物品的个数<25;
该数组从第1行到第m行(1<=j<=m)中给出了编号为j的物品的基本数据,每行有2个非负整数,
表示该物品的价格(<=10000)和该物品的重要度(1~5)。
GetResult表示不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。
不需做入参检查,测试用例可以保证~
例如:4000 8(第0行)第一行为总钱数和要买的物品数量
821 3 (第1行)
422 5
458 5
500 3
200 2
430 4
530 3
239 3
则表示 总钱数为4000,希望购买物品个数为8个,因此从第1行到第8行表示编号为j的物品的价格及物品的重要度。
void GetResult(int*p,int& Get_Result)
{
// 在这里实现功能
int money = p[0];
int num = p[1];
int value = 0;
int level = 0 ;
int i,j;
int count[30000]={0};
for(i = 1;i <= num;i++)
{
value = p[2*i];
level = p[2*i+1];
for(j = money; j>=value ;j--)
count[j] = (count[j-value] + value*level) > count[j] ? (count[j-value]+value*level) : count[j];
}
Get_Result = count[money];
}
数组的最后一位永远是最大值
相关文章推荐
- 算法-0-1背包的动态规划,回溯,分支限界三种解法
- 算法细节系列(9):动态规划之01背包
- [置顶] 动态规划之:让你轻松理解背包算法
- 算法:动态规划解 0-1 背包问题
- 动态规划-背包的基础上进行模拟 2018年全国多校算法寒假训练营练习比赛(第二场)牛客网B题
- (基于Java)算法之动态规划——0-1背包问题
- 算法 -- 0-1背包问题之动态规划
- 算法导论学习笔记(十三):动态规划(三):01背包问题
- 算法竞赛宝典 动态规划 货币系统问题(完全背包+一维优化)
- 算法导论 第四部分——基本数据结构——第15章:动态规划:背包问题
- 【算法】——动态规划之0-1背包问题
- 关于动态规划的几个算法
- 关于0-1背包的动态规划,回溯和分支限界法的一些分析和代码
- 算法笔记:动态规划背包问题(未完待续)
- 【算法学习笔记】30.动态规划 01背包和完全背包的关系
- 背包算法递归实现,递归转动态规划的一般方法java实现
- 【算法】——动态规划之0-1背包问题
- 【算法】——动态规划之0-1背包问题
- 动态规划---->每对定点之间的最短路径 Floyd(弗洛伊德)算法
- js算法:动态规划-最大公共子串与最大子段和