摘要: Monthly Expense大意:给你天数N(1 ≤ N ≤ 100,000),和每天需要花的钱(存放在数组中),让你把这些天分成M(1 ≤ M ≤ N)份(每份都是连续的天),要求每份的和最大值尽量小,输出这个和。思路:二分查找。让数组中的最大值为左界,数组的和为右界。左界的含义是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。右界的含义是将整个数组当做一块,那么最大值就是所有数字之和。那么在左右界中(含左右界)的数肯定有一个是解。二分搜索:给定一个初始数mid,从数组首元素开始叠加,超出mid那么分组数i加1,那么这么遍历一遍后能得到以mid为解所需的分组数,要是i小于M,说明 阅读全文
posted @ 2013-11-09 17:18 GLSilence 阅读(249) 评论(0) 推荐(0) 编辑
摘要: Monkey and Banana大意:把给定的长方体(不限个数)叠加在一起,上面的长和宽比下面的长和宽短,求这些长方体加起来的最高高度。思路:每个格子最多3个状态,也就是高最多有3种,也就是一共有N*3 最多90个格子,但是X和Y可以对调,那么就最多180个,对180个格子对X从小到大排序,X相等,Y就从小到大排序,那么这个问题就可以转换成类似求最大递增子序列问题一样思路的DP,DP[i]表示第i个格子时的最大值,dp[i+1]就是从前i个中找符合条件的最大的一个加上去。 1 #include 2 #include 3 #include 4 #include 5 #include ... 阅读全文
posted @ 2013-11-09 14:56 GLSilence 阅读(159) 评论(0) 推荐(0) 编辑