算法知识思路

  1. 趣学算法

第一章:贪心

贪心的两个重要特性:贪心选择性质、最优子结构性质。
1.贪心选择性质:指原问题的整体最优解可以通过一些列的局部最优的选择得到。依赖于自己已经做出的选择,运用贪心策略解决问题的过程中无法回溯。
2.最优子结构:当一个问题的最优解包含了其子问题的最优解的时,称此问题具有最优子结构的性质。

1. 加勒比海盗船-最优装载问题

海盗船载重为C,每件古董价值都一样,重量为Wi,海盗们如何获取最多的古董?

一:算法设计

a.载重为C的时候,wi越小我们可以载的物品就越多,所以只要依次选择前面最小的,直到不能装为止。
b.把n个物品按照重量进行排序,从小到大,然后按照贪心策略尽可能多的选择前面的i个物品,直到不能装下即可。

二:实战代码

#include<iostream>
#include<algorithm> // 万能头文件
using namespace std;

const int N = 1000005;
double w[N];

int main()
{
   
	double c, temp = 0.0;
	int ans = 0 , n ,j = 0;
	cout << "请输入船重c以及古董的数量n:" << endl;
    cin >> c >> n;
    cout << "请输入古董的重量,用空格分开:" << endl;
    for(int i = 0 ; i <= n; i++)cin >> w[i];        
    sort( w, w + n);                                
    while(temp <= c)                                 
    {
   
    	temp += w[j++];
    	if(temp > c)break;
    	else ans++;
    }
    cout << ans << endl;
    return 0;
}

三:思考-如果想知道装入了哪一些物品,应该如何设计?

1.标记原位置与排序后的位置
2.创建一个新数组来记录录入的物品值

2. 阿里巴巴与四十大盗-背包问题

假设山洞中有n种宝物,每种宝物都有一定的重量w和相应的价值v,毛驴运载能力有限,只能运走m重量的宝物,一种宝物只能拿一样,宝物可以分割,那么怎么才能使毛驴运走的宝物的价值最大呢?

一:算法设计

1.数据结构初始化,将n种宝物的重量和价值存储在结构体中three(重量,价值,性价),同时求出每种宝物的性价比也存储在对应的结构体中,将性价比从高到低来排序,采用sum才存储能够运走的最大价值,初始化为0。
2.使用贪心策略,按照性价比从大到小选取宝物,直到达到毛驴的运载能力,每次都选择性价比高的物品,判断是否小于m,如果小于m,则放入,sum加上当前宝物的价值,m减去当前宝物的价值,如果不小于m,则取该宝物的一部分。

二:实战演练

#include<iostream>
#include<algorithm>
using namespace std;

const int M = 1000005;
struct three{
   
	double w;
	double v;
	double p;
	
}s[M];
bool cmp(three a,three b)
{
   
	return a.p > b.p;
}
int main()
{
   
	int n , a = 0;
    double m;
    cin >> n >> m;
    for(int i =</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值