数据结构与算法 -- 动态规划算法
2020-12-13 03:19
标签:state turn new 条件 商品 购物节 oid 数据结构与算法 string 1、0-1背包问题 2、0-1背包问题【升级版】 3、"双十一"购物拼单问题 数据结构与算法 -- 动态规划算法 标签:state turn new 条件 商品 购物节 oid 数据结构与算法 string 原文地址:https://www.cnblogs.com/jiangwangxiang/p/11072573.html//0-1背包问题--动态规划算法
public class DynamicPlan {
public static void main(String[] args) {
DynamicPlan dynamicplan = new DynamicPlan();
int[] weight = {1, 2, 3, 4, 5};
System.out.println("方法一 背包所装物品的重量为:" + dynamicplan.knapsack(weight, weight.length, 12));
System.out.println("方法二 背包所装物品的重量为:" + dynamicplan.knapsack2(weight, weight.length, 12));
}
//方法一 weight:物品重量,n:物品个数,w:背包可承载重量
public int knapsack(int[] weight, int n, int w) {
boolean[][] states = new boolean[n][w+1];//默认值false
states[0][0] = true;//第一行的数据要特殊处理,可以利用哨兵优化
if(weight[0] w) {
states[0][weight[0]] = true;
}
for(int i=1; i
//0-1背包问题【升级版】--动态规划算法
public class DynamicPlan {
public static void main(String[] args) {
DynamicPlan dynamicplan = new DynamicPlan();
int[] weight = {2, 2, 4, 6, 3};//物品的重量
int[] value = {3, 4, 8, 9, 6};//物品的价值
int n = 5;//物品个数
int w = 9;//背包承受的最大重量
System.out.println("背包所装物品的最大价值为:" + dynamicplan.knapsack3(weight, value, n, w));
}
//方法一 weight:物品重量,n:物品个数,w:背包可承载重量
public int knapsack3(int[] weight, int[] value, int n, int w) {
int[][] states = new int[n][w+1];
for(int i=0; i
/**
* "双十一"购物拼单问题--动态规划算法
*
* "双十一"购物节举办一个"满200元减50元"的促销活动,假设你女朋友的购物车中有
* n(n>100)个想买的商品,她希望从里面选几个,在凑够满减条件的前提下,让选出来
* 的商品价格和最大程度的接近满减条件(200元),这样就可以极大限度的"薅羊毛"
*/
public class DynamicPlan {
public static void main(String[] args) {
DynamicPlan dynamicplan = new DynamicPlan();
int[] items = {12, 25, 48, 6, 33, 120, 59, 88, 4, 71, 169, 23, 112};
dynamicplan.double11advance(items, items.length, 200);
}
//items 商品价格,n 商品个数,w 表示满减条件,比如200
public void double11advance(int[] items, int n, int w) {
boolean[][] states = new boolean[n][3*w+1];//超过3倍就没有薅羊毛的价值了
states[0][0] = true;//第一行的数据要特殊处理
if(items[0] 3*w) {
states[0][items[0]] = true;
}
for(int i=1; i
下一篇:C++语言动态创建对象