《实用算法的分析与程序设计》的读书笔记(第1天)
来源:互联网 发布:网络推广交流论坛 编辑:程序博客网 时间:2024/06/01 10:44
由于很多网友的推荐,终于使我静下心来好好的看一下《实用算法的分析与程序设计》这本书!果然是名付其实!现在将我看书过程中遇到的题目用c++给出,原文是用pascal给出的!很多朋友甚至因为这个原因而放弃这本书!很可惜!注:这些程序我都在bc5。0中通过了!
递推 第4页
一辆重型卡车欲穿过1删公里的沙漠,卡车耗油为1升/公里,卡车总裁油能力为500公升。显然卡车装一次油是过不了沙漠的。因此司机必须设法在沿途建立几个储油点,使卡车能顺利穿越沙漠,试问司机如何建立这些贮油点?每一贮泊点应存多少汽油,才能使卡车以消耗最少汽油的代价通过沙漠? 题解:
#include<iostream.h>
#include<iomanip.h>
void oil_lib()
{
int k;float d,dl;
float oil[10],dis[10];
cout<<"No."<<setw(20)<<" distance(k.m)"<<setw(90)<<" oil(l.)"<<endl;
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<k;i++)
cout<<i<<setw(20)<<(1000-dis[k-i])<<setw(90)<<oil[k-i]<<endl;
}
贪心法 第10页有一个贼在偷窃一家商店时发现有N件物品:第i件物品值Vi元,重Wi磅,(1<=i<=n), 此处Vi和Wi都是整数。他希望带走的东西越值钱越好,但他的背包中最多只能装下W磅的东西(W为整数)。如果允许小偷可带走某个物品的一部分,小偷应该带走哪几件东西, 每件东西的重量是多少?题解:#include<iostream.h>
#include<stdio.h>
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<n;i++)
cout<<list[i].num<<" "<<list[i].w<<" "<<list[i].v<<endl;
cout<<endl;
}void merge(int p,int q,int r)
{
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<N;i++){ /*物品的重量和价值*/
cin>>w>>v;
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<N){
W-=list[j].w;
V+=list[j].v;
printf("%d%8.2f%8.2f/n",list[j].num,list[j].w,list[j].v);
j++;
}
if(j<N&&W!=0){
V+=W*list[j].vper;
printf("%d%8.2f%8.2f/n",list[j].num,W,W*list[j].vper);
W=0;
}
cout<<"total value: "<<V<<endl;
}
int main()
{
int N,W;
cin>>N>>W;
Partial_Bag_Problem(N,W);
return 1;
}贪心法 第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<iostream.h>
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<n;i++)
cout<<list[i].k<<" "<<list[i].d<<" "<<list[i].w<<endl;
cout<<endl;
}void merge(int p,int q,int r)
{
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<N;i++){
cin>>d>>w;
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<N;i++){
t=0;
for(j=0;j<num;j++)
if(list[pck[j]].d<=num)
t++;
/* cout<<"t:"<<t<<" ";*/
if(t<list[i].d){
pck[num]=i; list[i].k=-list[i].k; j=num++; /*cout<<"j:"<<j<<" ";*/
while(j>0){
if(list[pck[j]].d<list[pck[j-1]].d){
t=pck[j];pck[j]=pck[j-1];pck[j-1]=t;
}
j--;
}
}
}
for(i=0;i<num;i++)
cout<<(-list[pck[i]].k)<<" ";
cout<<endl;
for(i=0;i<N;i++)
if(list[i].k>0){
cout<<list[i].k<<" ";
sum+=list[i].w;
}
cout<<endl;
cout<<"total fine= "<<sum<<endl;
}int main()
{
int N;
cin>>N;
Tasks_with_limit_and_fine(N);
return 1;
}
- 《实用算法的分析与程序设计》的读书笔记(第1天)
- 《实用算法的分析与程序设计》的读书笔记(第2天)
- 实用算法的分析与程序设计——贪心算法(包含实例,代码)
- 实用算法的分析与程序设计——分治算法(归并排序,快速排序)
- 实用算法的分析与程序设计——递推法(倒推法)
- 实用算法的分析与程序设计——递推法(顺推法)包含实例,代码
- 实用算法的分析与程序设计——递归法(实例,代码)(划分问题、0-1背包问题)
- 以实用著称的《PHP与MySQL程序设计(第3版)》问世啦!
- 算法设计与分析基础(第3版)读书笔记(及几处翻译上的错误~~)
- 算法分析与设计的读书笔记加个人总结
- PHP与MySQL程序设计(第3版)读书笔记(一)
- 数据结构与算法分析 c++描述 读书笔记(1)
- <<linux程序设计(第4版)>>读书笔记1
- 读书笔记 JavaScript 高级程序设计(第三版)-- 第1章
- SICP 读书笔记——第 一 章 构造过程抽象——第 1 节 程序设计的基本元素
- 数据结构与算法设计(读书笔记):2.算法分析
- 程序设计与算法(一)C语言程序设计CAP 第一周
- 程序设计与算法(一)C语言程序设计CAP 第四周
- IT三字经
- 用C#.net轻松制作不规则窗体(附源码)
- PHP是一种没有前途的嵌入式脚本语
- 编程的苦与乐(摘自《人月神话》)
- SM3D的OpenGL教程(一):超酷三维汉字特效
- 《实用算法的分析与程序设计》的读书笔记(第1天)
- 《实用算法的分析与程序设计》的读书笔记(第2天)
- 也谈C++中THUNK的一种实现技术
- Internet worm入门教程
- ACCESS技巧集(DELPHI AND SQL)
- 程序设计和调试中的几点总结
- 实用的存储过程之一
- 构建企业级报表设计方案
- 项目设计和客户的关系