《實用演算法的分析與程式設計》的讀書筆記(第1天) (轉)
由於很多網友的推薦,終於使我靜下心來好好的看一下《實用演算法的分析與設計》這本書!果然是名付其實!現在將我看書過程中遇到的題目用c++給出,原文是用pascal給出的!很多朋友甚至因為這個原因而放棄這本書!很可惜!注:這些程式我都在bc5。0中透過了!
遞推 第4頁
一輛重型卡車欲穿過1刪公里的沙漠,卡車耗油為1升/公里,卡車總裁油能力為500 公升。顯然卡車裝一次油是過不了沙漠的。因此司機必須設法在沿途建立幾個儲油點,使卡車能順利穿越沙漠,試問司機如何建立這些貯油點?每一貯泊點應存多少汽油,才能使卡車以消耗最少汽油的代價透過沙漠? 題解:
#include #include void oil_lib() { int k;float d,dl; float oil[10],dis[10]; cout<
k=1; d=500; dis[1]=500; oil[1]=500; do{ k++; d+=500/(2*k-1); dis[k]=d; oil[k]=oil[k-1]+500; }while(d<1000); dis[k]=1000; dl=1000-dis[k-1]; oil[k]=dl*(2*k+1)+oil[k-1]; for(int i=0;i cout<
} 貪心法 第10頁 有一個賊在偷竊一家商店時發現有N件物品:第i件物品值Vi元,重Wi磅,(1<=i <=n), 此處Vi和Wi都是整數。他希望帶走的東西越值錢越好,但他的揹包中最多隻能裝下W磅的東西(W為整數)。 如果允許小偷可帶走某個物品的一部分,小偷應該帶走哪幾件東西, 每件東西的重量是多少? 題解: #include void merge(int p,int q,int r) 貪心法 第15頁 任務排程問題 一個單位時間任務是個作業,如要在上執行一個程式,它恰覆蓋一個單位的執行時間。給定一個單位時間任務的集合S,對S的一個排程即S的一個排列,其中規定了這些任務的順序。該排程中的第一個任務開始於時間0,結束於時間15第二個任務開始於時間1,結束於時間2;……。 單上具有期限和罰款的單位時間任務排程問題的輸人如下: 1.包含n個單位時間任務的集合S=f1,2,……,n75 2.n個取整的期限d1,I。.…,d n,(1<d5之n),任務i要求在di前完成; 3.21個非負的權(或罰款)w:,·,b…,wno如果任務i沒在時間di之前結束罰款w5;. 要求找出S的一個排程,使之最小化總的罰款。 題解: #include void merge(int p,int q,int r) int main()
#include
const maxn=1000;
class Node{
public:
Node(){}
Node(int a,float b,float c):num(a),w(b),v(c){vper=c/w;}
int num; float w,v,vper;
};
Node list[maxn],lt[maxn];
void print(int n)
{
for(int i=0;i cout<
{
int i,j,t;
t=p;i=p;j=q+1;
while(t<=r){
if( (i<=q)&&((j>r)||(list[i].vper>=list[j].vper)) ){
lt[t]=list[i]; i++;
}else{ lt[t]=list[j]; j++; }
t++;
}
for(int s=p;s<=r;s++)
list[s]=lt[s];
}
void merge_sort(int p,int r)
{
int q;
if(p!=r){
q=(p+r)/2;
merge_sort(p,q);
merge_sort(q+1,r);
merge(p,q,r);
}
}
void Partial_Bag_Problem(int N,float W)
{
float V=0;
float w,v;
for(int i=0;i
Node node((i+1),w,v);
list[i]=node;
}
/*print(N)*/
merge_sort(0,N-1);
/*print(N)*/
int j=0;
while(W>list[j].w&&j
V+=list[j].v;
printf("%d%8.2f%8.2fn",list[j].num,list[j].w,list[j].v);
j++;
}
if(j
printf("%d%8.2f%8.2fn",list[j].num,W,W*list[j].vper);
W=0;
}
cout<}
int main()
{
int N,W;
cin>>N>>W;
Partial_Bag_Problem(N,W);
return 1;
}
const maxn=500;
class Node{
public:
Node(){}
Node(int a,int b,int c):k(a),d(b),w(c){}
int k,d,w;
};
Node list[maxn],lt[maxn];
void print(int n)
{
for(int i=0;i cout<
{
int i,j,t;
t=p,i=p,j=q+1;
while(t<=r){
if((i<=q)&&((j>r)||(list[i].w>=list[j].w)))
lt[t]=list[i++];
else lt[t]=list[j++];
t++;
}
for(int s=p;s<=r;s++)
list[s]=lt[s];
}
void merge_sort(int p,int r)
{
int q;
if(p!=r){
q=(p+r-1)/2;
merge_sort(p,q);
merge_sort(q+1,r);
merge(p,q,r);
}
}
void Tasks_with_limit_and_fine(int N)
{
int d,w;
int pck[maxn];
int num=0,t,sum=0; /*當前完成的任務個數 罰款總數*/
for(int i=0;i
Node node((i+1),d,w);
list[i]=node;
}
/*print(N);*/
merge_sort(0,N-1);
/*print(N);*/
int i,j;
for(i=0;i
for(j=0;j
t++;
/* cout< if(t pck[num]=i; list[i].k=-list[i].k; j=num++; /*cout< while(j>0){
if(list[pck[j]].d t=pck[j];pck[j]=pck[j-1];pck[j-1]=t;
}
j--;
}
}
}
for(i=0;i
cout< sum+=list[i].w;
}
cout<
{
int N;
cin>>N;
Tasks_with_limit_and_fine(N);
return 1;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992860/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《實用演算法的分析與程式設計》的讀書筆記(第2天) (轉)演算法程式設計筆記
- Java遊戲程式設計讀書筆記(轉)Java遊戲程式設計筆記
- Lua設計與實現--讀書筆記筆記
- 《Redis設計與實現》讀書筆記Redis筆記
- 《LINUX與UNIX SHELL程式設計指南》讀書筆記(轉)Linux程式設計筆記
- 一個程式設計師的讀書筆記:程式設計的反思程式設計師筆記
- 《程式設計師的吶喊》讀書筆記程式設計師筆記
- JavaScript DOM 程式設計藝術(第2版) 讀書筆記JavaScript程式設計筆記
- 《實用Common Lisp程式設計》書評、讀書筆記有獎徵集Lisp程式設計筆記
- 《Servlet與JSP核心程式設計》讀書筆記ServletJS程式設計筆記
- 《Effective C++》第4章 設計與宣告(2)-讀書筆記C++筆記
- 《Effective C++》第4章 設計與宣告(1)-讀書筆記C++筆記
- 《Web API的設計與開發》讀書筆記WebAPI筆記
- 程式程式設計3 - UNIX高階環境程式設計第9章讀書筆記程式設計筆記
- 《程式設計匠藝》讀書筆記程式設計筆記
- 《程式設計師的自我修養》-讀書筆記程式設計師筆記
- 讀書筆記 - 《程式設計師的自我修養》筆記程式設計師
- 【讀書筆記】JavaScript高階程式設計(第3版)(第5-7章)筆記JavaScript程式設計
- 一個程式設計師的讀書筆記——關於程式設計的反思程式設計師筆記
- Java 併發程式設計實踐 讀書筆記四Java程式設計筆記
- 《實用Common Lisp程式設計》讀書小記Lisp程式設計
- 《JavaScript程式設計精解》--讀書筆記JavaScript程式設計筆記
- 《Java程式設計思想》讀書筆記一Java程式設計筆記
- 讀書筆記-Java程式設計思想-03筆記Java程式設計
- 反應式程式設計讀書筆記程式設計筆記
- 《重構:改善既有程式碼的設計》讀書筆記筆記
- 《重構-改善既有程式碼的設計》讀書筆記筆記
- 【讀書筆記】Java併發程式設計的藝術筆記Java程式設計
- 《重構,改善既有程式碼的設計》讀書筆記筆記
- 卓有成效的程式設計師 讀書筆記程式設計師筆記
- Linux核心設計與實現(原書第3版)筆記Linux筆記
- 《Redis 設計與實踐》讀書筆記系列五:字典 rehashRedis筆記
- 《寫給大家看的設計書》讀書筆記筆記
- 《黑客與畫家》之設計者的品味——讀書筆記黑客筆記
- 資料結構與演算法分析 讀書筆記(樹)資料結構演算法筆記
- Java併發程式設計實戰--讀書筆記(目錄)Java程式設計筆記
- 《重構:改善既有程式碼的設計》讀書筆記(一)筆記
- 高效程式設計師的45個習慣 讀書筆記程式設計師筆記