国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Arithmetic problem | 書籍復印

2019-11-14 08:57:29
字體:
來源:轉載
供稿:網友

題目如下: 給出一個數組A包含n個元素,表示n本書以及各自的頁數?,F在有個k個人復印書籍,每個人只能復印連續一段編號的書,比如A[1],A[2]由第一個人復印,但是不能A[1],A[3]由第一個人復印,求最少需要的時間復印所有書。

樣例: A = [3,2,4],k = 2

返回5,第一個人復印前兩本書

解題思路: 這個題有一定難度,先提出合理假設B(l,k)為l個數據規模的k人分配使用最短時間。把數據規模劃分為兩部分,從右到左,依次增加右規模,表示第k人印刷書籍量,而左規模則表示其他人所印刷書籍量,這樣左規模的最短時間即是B(左規模數量,k-1)了,至于右規模的最短時間,用相應B(右規模數量,1)-B(左規模數量,1)即可,把當前規模的右規模從l到k(如果有k個人印k本書,一人一本肯定最短時間,因此預留k本書)的所有最短時間取最小值,即當前規模最小時間。那么,只需要提供k-1人的1到l數據規模的最短時間即可遞推B(l,k)。

思路實現代碼:

int Method(int *n,int len,int k){ if(k>len) k=len; int **matrix=new int *[len]; for(int i=0;i<len;++i) matrix[i]=new int[k+1], ZeroMemory(matrix[i],k*4+4); int res=0; matrix[0][1]=n[0]; for(int i=1;i<len;++i) matrix[i][1]=matrix[i-1][1]+n[i]; for(int i=2;i<=k;++i) for(int p=i-1;p<len;++p) for(int t=i-1;t<=p;++t) { res=max(matrix[t-1][i-1], matrix[p][1]-matrix[t-1][1]); matrix[p][i]=matrix[p][i]==0?res:min(matrix[p][i],res); } res=matrix[len-1][k]; for(int i=0;i<len;++i) delete[] matrix[i]; delete[] matrix; return res;}
上一篇:上樓梯問題

下一篇:BASE64編碼簡介

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 工布江达县| 太原市| 永宁县| 文水县| 缙云县| 山阳县| 柯坪县| 建瓯市| 探索| 石首市| 葵青区| 定州市| 胶州市| 年辖:市辖区| 珲春市| 察哈| 霍城县| 阿拉善左旗| 阿合奇县| 乌拉特前旗| 望奎县| 宝坻区| 永清县| 邓州市| 锡林郭勒盟| 滁州市| 治多县| 康马县| 白水县| 临朐县| 米泉市| 邳州市| 望奎县| 务川| 兰考县| 浦城县| 齐齐哈尔市| 康保县| 清流县| 开平市| 定陶县|