分治法解决得大奖问题

    前言:在阿里前端测试在线编程时,突然蹦出一个C++的题目,一脸懵之后开始做题。果然,浪费了时间得结果就是上交了错误答案。所以还是要勤打代码啊( ̄▽ ̄)",所以写篇博客记录下来。以后记录就放博客了,不放有道云了:-D

    题目:大致为有n个箱子按顺序排列,打开每个箱子有要付相应的钱,打开后会告诉你大奖在这个箱子的左边还是右边。问要得出大奖需要最少付出多少钱。

    输入箱子个数:n

    输入打开每个箱子的价格:...

#include <iostream>
using namespace std;
int allValue;
int dung(int *arr,int start,int endN);
int dung(int *arr,int start,int endN) 
{   int num = (endN-start)/2;   
 	int ou = 0;    
 	int flag = 0;   
 	allValue += arr[num+start];    
 	if(num > 1){        
 		dung(arr,start,start+num-1);    
 	}else{        
 		flag +=1;    
 	}    
 	if(endN-num-start > 1){       
 		dung(arr,start+num+1,endN);    
 	}else{        
 		flag +=1;    
 	}    
 	if(flag == 2){        
 		return 0;    
 	}
}
int main() 
{       int res;    
	allValue = 0;    
	int _eggs_size = 0;    
	cin >> _eggs_size;    
	int *_eggs=new int[_eggs_size+1];    
	int _eggs_item;    
	_eggs[0]=0;    
	for(int _eggs_i=1; _eggs_i<=_eggs_size; _eggs_i++) 
	{        
		cin >> _eggs_item;        
		_eggs[_eggs_i] = _eggs_item;    
	}    
	dung(_eggs,1,_eggs_size);    
	cout << allValue << endl;
        delete[] _eggs;
        return 0;
}

暂时就用分治法做了,如果有什么不对和建议欢迎提出~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值