补充的算法题
来源:互联网 发布:制表软件 编辑:程序博客网 时间:2024/06/06 04:41
题目描述
题目是这样的:“一个双人游戏是这样玩的:给定一个非负正整数序列,你每次只能从序列头部取1个、2个或者3个数,取到的整数累加到你的得分上。两个人轮流如此,知道取完所有整数。每个人都足够聪明,每个人的目的是最大化自己的得分,请问第一个人最终的得分是多少?输入格式多组数据,每组数据第一行是一个正整数n,表示序列中数的个数。(n<=100000)第二行是n个空格分隔的非负整数,表示每个数,每个数不超过1000000000。输出格式表示你的最终得分”
实现代码如下:
#include<stdio.h>#include<stdlib.h>int *arr; //返回a,b,c中的最大值。 int max(int a,int b,int c){ if(a>=b&&a>=c) return a; else if(b>=c) return b; else return c; }//计算数组从下标index开始剩余元素的长度 int sum(int index,int len){ int sum=0; for(int i=index;i<len;i++){ sum+=arr[i]; } return sum;}//返回的是第二个人的得分。//有个逻辑要清楚:第一次你是firstPoint,第二次你就是secondPoint,计算这两者的最大值才是你的得分。 int maxPoint(int begin,int len){ int length=len-begin; int firstPoint=0;//第一个选手先来 int secondPoint=0; //以下三个变量用来表示取一张牌、二张牌和三张牌的最大结果。 int onePoint=0; int twoPoint=0; int threePoint=0; if(length<=3){ //将剩余的全部取走,使其达到最大 for(int i=begin;i<len;i++){ firstPoint+=arr[i]; return 0; } } else if(length==4){ firstPoint=arr[begin]+arr[begin+1]+arr[begin+2]; secondPoint=arr[len-1]; return secondPoint; } else{//还有很多元素 onePoint=arr[begin]+maxPoint(begin+1,len); twoPoint=arr[begin]+arr[begin+1]+maxPoint(begin+2,len); threePoint=arr[begin]+arr[begin+1]+arr[begin+2]+maxPoint(begin+3,len); //在onePoint /twoPoint/threePoint 中取最大值 firstPoint=max(onePoint,twoPoint,threePoint); secondPoint=sum(begin,len)-firstPoint; return secondPoint; }}int main(void){ int k; while(scanf("%d",&k)!=EOF&&k>0){ arr=(int *)malloc(k*sizeof(int)); if(arr==NULL){ exit(EXIT_FAILURE); } for(int i=0;i<k;i++) scanf("%d",arr+i); int result=sum(0,k)-maxPoint(0,k);// printf("%d\n",result); }}
1 0
- 补充的算法题
- 贪心算法的补充
- 补充:需要掌握的算法
- 之前IK动画算法的补充
- 对SPFA算法的一些补充结论
- [补充说明]TEA算法的VB实现代码的使用说明
- 对网上流传的水波算法的补充与修正
- 关于《算法的乐趣》傅立叶变换一章的补充
- SIFT算法基本概念补充~
- PHP排序算法补充
- 顺序表算法补充
- 贪心算法知识点补充
- 排序算法--补充
- 补充:迪杰斯特拉算法的最短路径跟踪
- 补充的
- 【游戏算法之连连看】我最开始想到的连连看的 消除算法。。。。。【补充】
- DH算法实现_关于Imooc上moocer老师的DH算法的补充
- 排序算法 笔记 有待补充
- 电商搜索引擎
- 网狐棋牌(三) 调度引擎初步分析
- 编译过程中遇到的一些错误
- 1153 - Got a packet bigger than 'max_allowed_packet' bytes With statement
- 【LeetCode从零单刷】Longest Consecutive Sequence
- 补充的算法题
- iOS小技巧-UITextFiled/UITextView设置系统圆角边框
- ptr_fun
- opencv学习篇(4)Mat - 基本图像容器
- Xcode 删除过期的Provisioning Profile文件
- CocoaPods使用
- 低功耗蓝牙4.0BLE编程-nrf51822开发(9)
- BZOJ 1082 栅栏 [二分+搜索]
- 玩转Visual Studio-跳出坑爹的Runtime Library库