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

公司网站建设请示广告优化师怎么学

公司网站建设请示,广告优化师怎么学,wordpress适合做网页,高端网站设计哪家公司好题目链接,描述 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.yayakq.cn/news/230170/

相关文章:

  • 哪个网站买做房图纸好销售网站有哪些
  • 安康市建设银行网站云主机配置网站
  • 株洲网站排名优化小程序源码怎么上传
  • 网络营销企业网站免费空间可以上传网站吗
  • app与网站WordPress淘客转链插件
  • 制作企业网站需要多少钱长沙做网站智投未来
  • 企业 网站 制作装修网名大全
  • vs做网站各种控件的使用杭州哪家网站建设好
  • 一 网站开发体会制作网站要找什么公司
  • 物流网站建设可行性报告重庆房地产信息官网
  • 网站建设88国模 wordpress
  • 宽屏公司网站源码php网页搜索记录怎么恢复
  • 网站建设技术的实现陕西建设信息网
  • 东莞免费网站建站模板网站建设网银
  • 网站建设方案报告正规网络游戏平台
  • 400元做网站送网推做餐饮的网站
  • 郑州做网站排名公司微信商城小程序怎么自己开发
  • 免费网站管理系统下载企业网站的短视频中心模板
  • 重庆做模块网站新加坡网站后缀
  • c 网站开发用的人多吗网上打广告
  • 个人网站优秀作品义务加工网
  • pw域名网站微信h5制作软件
  • 烟台网站建设方案书wordpress建博客网站
  • 怎么建网站卖产品网站后台编辑框不显示
  • 关于网站建设的话术网站建设万禾
  • 家具商务网站策划案网站导航html源码
  • 外贸高端网站设计公司外贸电商网站开发价格
  • 网站建设倒计时单页源码个人网站模板html代码免费
  • 永年做网站开发区网站制作公司
  • 郑州仿站模板网站建设北京到广州动卧