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

杭州网站建设设计大数据营销精准营销

杭州网站建设设计,大数据营销精准营销,wordpress智慧面板,php网站 关键技术题目链接,描述 https://www.lintcode.com/problem/344/ 给定长度为N的正整数数组song代表N首歌的时间 请你任选其中若干首播放,在满足开始播放最后一首歌的时间小于M的情况下求播放歌曲的最长时间 每首歌只能被播放一次 你可以任意指定播放顺序1 \leq …

题目链接,描述

https://www.lintcode.com/problem/344/

给定长度为N的正整数数组song代表N首歌的时间
请你任选其中若干首播放,在满足开始播放最后一首歌的时间小于M的情况下求播放歌曲的最长时间
每首歌只能被播放一次
你可以任意指定播放顺序1 \leq N \leq 10^31N10 
31 \leq M \leq 10^51M10 
51 \leq song_i \leq 10^51≤song 
i
​≤10 
5样例
输入:[1,2,3,4,5]
14
输出:15
解释:依次播放第一首歌到第五首歌

思路

我们先证明,时长最长的那首歌是一定会被选中的。如果不然,则可以将最后播放的那首歌替换成这个时长最长的,能得到更优解,矛盾。那么我们只考虑剩下的歌的选择。问题转化为,问总长度小于M MM的情况下,最长总时长是多少。这是个0 − 1 0-10−1背包问题,可以用动态规划解决

代码

public class Solution {/*** @param song: an array represent song'time* @param m: an integer represent sont time limit* @return: return the longest time for song*/public int longestSongTime(int[] song, int m) {/*思路:1:和第92题背包问题一样的,本题只需要把最大的一个数字去掉,2:然后求剩余的数字背包不大于m的情况下最大是多少然后用这个最大值+ 第一步去掉的最大值*///return f1(song,m); //递归+缓存,超过内存限制了,代码正确的,但是不能作为答案//下面是动态规划的答案,提交他就能通过int n = song.length;int max=Integer.MIN_VALUE, maxIdx = -1;for (int i = 0; i < n; i++) {if(song[i] > max){max = song[i];maxIdx = i;}}song[maxIdx] =0; //最大值不参与动态规划计算,但是用于最后的结果int[][] dp = new int[song.length+1][m+1];for (int i = song.length-1; i >=0 ; i--) {for (int rest = 0; rest <=m ; rest++) {int p1 = dp[i+1][rest];int p2 =0;int next = (rest-song[i] <=0)?-1:(dp[i+1][rest-song[i]]);if(next!=-1){p2 = next+song[i];}dp[i][rest]=Math.max(p1,p2);}}return dp[0][m]+max;}public static int f1(int[] song, int m) {//递归+缓存//思路:1:和第92题背包问题一样的,本题只需要把最大的一个数字去掉,// 2:然后求剩余的数字背包不大于m的情况下最大是多少//然后用这个最大值+ 第一步去掉的最大值int max = Integer.MIN_VALUE, maxIdx = -1;for (int i = 0; i < song.length; i++) {if (song[i] > max) {max = song[i];maxIdx = i;}}int n = song.length;song[maxIdx] = 0;Integer[][] dp = new Integer[n + 1][m + 1];int curMax = dfs(0, m, song, dp);return curMax + max;}public static int dfs(int i, int rest, int[] arr, Integer[][] dp) {if (rest <= 0) return -1;if (i == arr.length) return 0;if (dp[i][rest] != null) return dp[i][rest];int p1 = dfs(i + 1, rest, arr, dp);int p2 = 0;int next = dfs(i + 1, rest - arr[i], arr, dp);if (next != -1) {p2 = next + arr[i];}dp[i][rest] = Math.max(p1, p2);return Math.max(p1, p2);}
}
http://www.rdtb.cn/news/13418.html

相关文章:

  • 如何将网站做的更美观新闻营销发稿平台
  • wordpress get_post百度爱采购优化排名软件
  • 网站建设咨询电话网站seo视频狼雨seo教程
  • 淘宝优惠劵做网站模版广告竞价排名
  • 网站建设的简要任务执行书免费下载百度一下
  • 北京做兼职从哪个网站营销策划与运营
  • 宁波做企业网站公司网络营销策划书3000字
  • 永久域名网站百度正版下载并安装
  • 网站要怎么做吸客户引眼球主流搜索引擎有哪些
  • 做网站费免图片网站平台宣传推广方案
  • 郑州优化公司有哪些seo搜索引擎优化书籍
  • 无锡网站维护公司想建立自己的网站
  • 新疆生产建设兵团公路局网站免费刷粉网站推广
  • 广西建设职业技术学院管理工程系网站2014考试前培训时间市场推广方案
  • 整站排名无线网络优化工程师
  • 企业微信网站开发公司有域名后如何建网站
  • 杭州公司注册地址最新要求搜索引擎优化是做什么
  • 怎么提高网站速度口碑营销策略
  • 电商设计课程文明seo技术教程网
  • 网站建设与维护税点小规模二十个优化
  • 动漫设计工作室网站建设公司交换友情链接的途径有哪些
  • wordpress建站视频自动点击器
  • 做专业慢摇的网站十大接单平台
  • 高端网站建设搭建百度搜索排行榜
  • 345诛仙网站是谁做的神马快速排名优化工具
  • app宣传的网站模板 bootstrap站长平台百度
  • 沌口网站建设seo如何优化关键词
  • 贵州新闻网站网络推广什么网站可以免费发广告
  • seo网站诊断方案sem管理工具
  • wordpress 自定义page企业网站优化服务