第四章 贪心算法
来源:互联网 发布:网络摄像机拍照 编辑:程序博客网 时间:2024/05/21 06:13
4.1 活动安排问题
分析:按照结束时间非递减排序,再贪心。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int NM=105;bool x[NM];struct Node{int s,f;}q[NM];bool comp(struct Node A,struct Node B){return A.f<B.f;}int Greed(int n){int i,res,temp;x[0]=true;res=1;temp=q[0].f;for(i=1;i<n;i++){if(q[i].s>=temp){temp=q[i].f;x[i]=true;res++;}else x[i]=false;}return res;}int main(){int i,n;while(scanf("%d",&n) && n){for(i=0;i<n;i++){scanf("%d%d",&q[i].s,&q[i].f);}sort(q,q+n,comp);printf("%d\n",Greed(n));for(i=0;i<n;i++) if(x[i]) printf("%d ",i);printf("\n");}return 0;}/*111 4 3 55 70 63 85 98 116 108 122 1312 14*/
4.4 哈弗曼编码
__int64 HuffmanTree(){priority_queue<__int64,vector<__int64>,greater<__int64> >pq1;__int64 res,t1,t2;for(int i=0;i<26;i++){if(hash[i]) pq1.push(hash[i]);}res=0;if(pq1.size()==1){res=pq1.top();pq1.pop();}while(pq1.size()>1){t1=pq1.top();pq1.pop();t2=pq1.top();pq1.pop();res+=t1+t2;pq1.push(t1+t2);}return res;}
4.5 单元最短路径
#include <iostream>#include <cstdio>#include <cstring>//#include <queue>using namespace std;const int NM=1005;const int MAX=0xfffffff;int a[NM][NM],p[NM],dis[NM],n;bool vis[NM];void Dijkstra(int s){int i,j,mmin,u;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){ dis[i]=a[s][i];if(dis[i]==MAX) p[i]=0;else p[i]=s;}dis[s]=0;p[s]=0;vis[s]=true;for(j=1;j<n;j++){mmin=MAX;u=s;for(i=1;i<=n;i++)if(!vis[i] && dis[i]<mmin){mmin=dis[i];u=i;}if(mmin==MAX) break;vis[u]=true;for(i=1;i<=n;i++){if(!vis[i] && dis[u]+a[u][i]<dis[i]){dis[i]=dis[u]+a[u][i];p[i]=u;}}}}int main(){int m,s,i,j,x,y,vau;while(~scanf("%d%d%d",&n,&m,&s)){for(i=1;i<=n;i++){ //初始化dis[i]=MAX;for(j=1;j<=n;j++)a[i][j]=MAX;}for(i=0;i<m;i++){scanf("%d%d%d",&x,&y,&vau); //单向if(vau<a[x][y]) a[x][y]=vau; //防重边}Dijkstra(s);for(i=1;i<=n;i++){printf("%d-%d Mincost:",s,i);if(dis[i]<MAX){printf("%d\n%d ",dis[i],i);j=i;while(p[j]!=0){printf("%d ",p[j]);j=p[j];}printf("\n");}else printf("-1");}}return 0;}/*5 7 11 2 101 4 301 5 1002 3 503 5 104 3 204 5 60*/
4.7 多机调度问题
分析:处理时间从大到小排序,然后依此顺序将作业分配给空闲的处理机。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int NM=105;int main(){int n,m,i,j,t,a[NM];while(~scanf("%d%d",&n,&m)){priority_queue<int,vector<int>,greater<int> >pq1;for(i=0;i<n;i++) scanf("%d",&a[i]);sort(a,a+n);if(n<m){printf("%d\n",a[n-1]);continue;}for(j=1;j<=m;j++) pq1.push(a[n-j]);for(i=j;i<=n;i++){t=pq1.top();pq1.pop();t+=a[n-i];pq1.push(t);}while(!pq1.empty()){t=pq1.top();pq1.pop();}printf("%d\n",t);}return 0;}/*7 32 14 4 16 6 5 3*/
0 0
- 第四章 贪心算法
- 基本算法——第四单元 贪心
- 训练第四天之贪心算法
- 算法第四节:贪心算法解决“超市找零方案”问题
- 算法原理 第四章
- 第十六章 贪心算法
- 算法导论第四章笔记
- 第四章 生成学习算法
- 算法 第四章 2.1.32
- 牛客算法--第四章
- 第16章 贪心算法
- 第16章 贪心算法
- 第 16 章 贪心算法
- <算法4>第四章图算法总结
- 【贪心】贪心算法总结
- 算法导论第十六章--贪心算法
- 算法导论 16章 贪心算法
- 贪心算法
- 文章分享代码
- V4L2用户空间和kernel层driver的交互过程
- Android 解锁屏启动过程
- 在linux下查看指定进程的所运行的CPU核
- 心一跳爱就开始煎熬 每一分每一秒 火在少 爱就开始煎熬
- 第四章 贪心算法
- 怎样使用批处理命令来删除文件
- 2014阿里巴巴实习生笔试题目 .
- Android Camera 通过V4L2与kernel driver的完整交互过程
- IOS--MKNetworkKit的使用方法
- 关于jquery中ajax
- easyui dialog 标题栏 不显示
- LeetCode:Path Sum I &&II
- 03.ServletContext