poj 2181

来源:互联网 发布:匡恩网络 经常加班 编辑:程序博客网 时间:2024/05/17 07:29
#include<stdio.h>#define N 150010int a[N];int main(){int i,n,flag,s;while(scanf("%d",&n)!=EOF){for(i=1;i<=n;i++)scanf("%d",&a[i]);a[0]=0;a[n+1]=0;s=0;flag=0;for(i=1;i<=n;i++){if(flag==0){if(a[i]>=a[i-1]&&a[i]>=a[i+1]){s=s+a[i];    flag=1;}}else{if(a[i]<=a[i-1]&&a[i]<=a[i+1]){s=s-a[i];flag=0;}}}printf("%d\n",s);}return 0;}给你n个数,找一些数(可以不连续,但顺序不可乱),奇数位置的数+,偶数位置的数-。最后得出的最大结果是?        从前往后搜,交替执行:       (1)找一个比相邻两个数都大的数,+;       (2)找一个比相邻两个数都小的数,-。#include<stdio.h>#define N 150010int a[N];int main(){int n,i,max1,max2;while(scanf("%d",&n)!=EOF){for(i=1;i<=n;i++)scanf("%d",&a[i]);max1=max2=0;for(i=1;i<=n;i++){if(max2+a[i]>max1)max1=max2+a[i];if(max1-a[i]>max2)max2=max1-a[i];}if(max1>max2)printf("%d\n",max1);elseprintf("%d\n",max2);}return 0;}

0 0
原创粉丝点击