2016年华为机试题(贪心算法)

来源:互联网 发布:东方不败知夫君是死神 编辑:程序博客网 时间:2024/05/20 14:15

题目描述:小X是一个偷懒的码农,最多连续工作两天,为了让小X尽可能多的完成工作,应该怎样给他安排工作时间,才能完成尽可能多的工作?

测试用例(连续五天的工作量):40 10 10 90 90   输出:230(五天中最大的工作量)


程序如下:

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

int max_max(int a,int b,int c)
{
 int max=(a>=b)? a:b;
 return (max>=c)? max:c;
}
int Max(int data[],int n)
{
 int a[n+1][3];
 a[0][0]=0;
 a[0][1]=data[0];
 a[0][2]=data[0];
 int i=1;
 for(;i<n;i++)
 {
  a[i][0]=max_max(a[i-1][0],a[i-1][1],a[i-1][2]);
  a[i][1]=a[i-1][0]+data[i];
  a[i][2]=a[i-1][1]+data[i];
 }
 return max_max(a[n-1][0],a[n-1][1],a[n-1][2]);
}
int main()
{
 int n;
 cin>>n;
 int data[n];
 int i=0;
 for(;i<n;i++)
 {
  cin>>data[i];
 }
 cout<<Max(data,n)<<endl;
  
 return 0;
}


0 0
原创粉丝点击