当前位置: 首页 > news >正文

算法练习 -- DP 查找和为指定数字的数组

问题:

从2,4,3,5,7,1,9,10中找出多个数,和为11


这个题目是0 1背包的一个变体,因此可用DP来解。

DP解法的关键在于得到递推公式,对于这个问题来说,DP公式为:

j ∈[1,11]

i ∈[0,7]

dp[i][j] = 从(arr[i], dpArr[i-1][j], arr[i] + dpArr[i-1][j], arr[i]+ dpArr[i-1][j-arr[i]]) 中选出小于j的最大值


具体代码如下:


void Main()
{
	DpFind();
	Console.WriteLine(dpArr);
}

static int n = 11;
static int[] arr = new int[]{2,4,3,5,7,9,10,6};

static int[,] dpArr = new int[8,12];

//j = 1..n , loop each element in arr
//dpArr[i,j] = Max(arr[i], dpArr[i-1][j], arr[i] + dpArr[i-1][j], arr[i]+ dpArr[i-1][j-arr[i]]) and the max not gather than j

static void DpFind(){

for(var i = 0; i < arr.Length; i++){
for(var j = 1; j <= n; j++){
if(i == 0){
var max = arr[i] > j ? 0 : arr[i];
dpArr[i,j] = max;
results[i+","+j] = max;
}

else if(i > 0){
var maxArr = new List<int>(){arr[i], dpArr[i-1,j],arr[i] + dpArr[i-1,j]};
if(j > arr[i]){
maxArr.Add(arr[i] + dpArr[i-1,j-arr[i]]);
}

dpArr[i,j] = MaxLessThan(j,maxArr.ToArray());
}

}
}

}


//find the max element in arr when less than x
static int MaxLessThan(int x , params int[] arr){
int s = 0;
for(var i = 0;i < arr.Length; i++){
if(arr[i] > s && arr[i] <= x){
s = arr[i];
}

}
return s;
}

DP中最后1个元素即dpArr[7][11]就是问题的解

相关文章:

  • 2009英雄会后记:最出彩是创业 最关注是产品 最可惜是创富
  • 算法练习--- DP 求解最长上升子序列(LIS)
  • Bellman ford 最短路径算法
  • ArcGIS Server Java ADF 案例教程 14
  • 扩展MongoDB C# Driver的QueryBuilder
  • ArcGIS Server Java ADF 案例教程 15
  • Floyd-Warshall 算法-- 最短路径(适合节点密集的图)
  • 英雄会创业论坛梁宁主持手记-初创业2人,天才少年2人,成功2人
  • Windows Azure系列-- 配置Azure Power Shell
  • 北京英雄会片段
  • Windows Azure 系列-- Azure Redis Cache的配置和使用
  • 2009 CSDN英雄会记事 - 珍惜时间、规划生活
  • LeetCode -- 删除链表中值为k的元素
  • ArcGIS Server Java ADF 案例教程 16
  • LeetCode --- Count And Say
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • android图片蒙层
  • ES6 学习笔记(一)let,const和解构赋值
  • idea + plantuml 画流程图
  • js算法-归并排序(merge_sort)
  • MySQL用户中的%到底包不包括localhost?
  • React as a UI Runtime(五、列表)
  • Tornado学习笔记(1)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 京东美团研发面经
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前言-如何学习区块链
  • 详解移动APP与web APP的区别
  • 如何正确理解,内页权重高于首页?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)常见O(n^2)排序算法解析
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (蓝桥杯每日一题)love
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)大型网站的系统架构
  • (转)关于pipe()的详细解析
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net2005怎么读string形的xml,不是xml文件。
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Data注解的作用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ IO.File ] FileSystemWatcher
  • [100天算法】-目标和(day 79)
  • [2023年]-hadoop面试真题(一)
  • [autojs]autojs开关按钮的简单使用
  • [AX]AX2012 R2 出差申请和支出报告