acm——贪心算法(背包问题)
来源:互联网 发布:oltp是数据挖掘吗 编辑:程序博客网 时间:2024/06/01 19:14
问题描述:
包可以承受15kg重量,有五个物体质量依次为12, 2 ,1, 4, 1价格为4,2,2,10,1,求包所能装的最大价值是
问题分析:
1.先求出价值=格/重量,并用数组保存;
2.根据价值,对数组内元素进行从大到小排序
3.从价值高的开始装,此时,背包问题分为可切割背包问题和不可切割背包问题
//可切割背包问题#include <iostream>using namespace std;class a{ public: int p,w; double v;};int main(){ a f[5],t; int i,j,s,m,n,sum; cin>>n; for(i=0;i<5;i++) { cin>>f[i].p>>f[i].w; f[i].v=(double)f[i].p/(double)f[i].w; } for(i=0;i<5;i++) for(j=0;j<5;j++) { if(f[i].v>f[j].v) { t=f[i]; f[i]=f[j]; f[j]=t; } } s=0; m=0; sum=0; for(i=0;i<5;i++) { s=s+f[i].w; if(n>s) { m=n-s; sum=sum+f[i].p; } else sum=sum+f[i].v*m; } cout<<sum<<endl; return 0;}
不可分割背包问题#include <iostream>using namespace std;class a{ public: int p,w; double v;};int main(){ a f[5],t; int i,j,s,m,n; cin>>n; for(i=0;i<5;i++) { cin>>f[i].p>>f[i].w; f[i].v=(double)f[i].p/(double)f[i].w; } for(i=0;i<5;i++) for(j=0;j<5;j++) { if(f[i].v>f[j].v) { t=f[i]; f[i]=f[j]; f[j]=t; } } s=0; m=0; for(i=0;i<5;i++) { s=s+f[i].w; if(s>n)break; m=m+f[i].p; } cout<<m<<endl; return 0;}
- acm——贪心算法(背包问题)
- acm-背包问题(贪心算法)
- 贪心算法——背包问题
- 贪心算法之——背包问题(nyoj106)
- 背包问题(贪心算法)
- 背包问题(贪心算法)
- 贪心算法(背包问题)
- 贪心算法——部分背包问题(贪心策略内容)
- 【0-1背包和背包问题——贪心算法应用(3)】
- 算法——贪心算法解0-1背包问题
- 【算法笔记】贪心算法——01背包问题
- 【算法】----贪心算法(背包问题)
- 贪心算法 - 背包问题
- 贪心算法----背包问题
- 【贪心算法】:背包问题
- 贪心算法-背包问题
- 贪心算法 背包问题
- 贪心算法-背包问题
- BIG5码转换为GB2312码的方法
- Ubuntu 13.10 has no way to modify the keyboard layout
- ubuntu开机出现grub rescue> normal.mod找不到的解决办法
- Jfreechart生成报表
- 黑马程序员:Java之main函数、static关键字介绍
- acm——贪心算法(背包问题)
- java 判断输入分数等级
- 黑马程序员_Java I/O 技术
- 好用的 FTP 软件之 FileZilla 技巧教程
- Android下自定义的jar库文件编译和调用
- cocos2d 之1 - cocos2d 概论
- ADF 入门帮助
- springmvc定制REST风格 以及 与JSR303 Bean校验整合
- SDL以及扩展库的交叉编译过程简介