请各位大佬帮忙看看这题,谢谢!
题目描述从n个数中取出若干个数,可以连续取1个,也可以连续取2个,但连续取的数不能有3个或多于3个。问取到的最大的和是多少?
输入
第1行:一个整数n(1<=n<=10000)。
第2行:空格隔开的n个整数ai(1<=ai<=100000)。
输出
一行,1个整数,表示取到的最大和。
2019-08-19 19:19
程序代码:#include <cstdio>
unsigned foo( const unsigned buf[], size_t n )
{
unsigned record[3] = { 0, 0, 0 };
for( size_t i=0; i!=n; ++i )
{
unsigned tmp = record[0];
record[0] = record[1];
record[1] = record[2];
{
if( record[0] < tmp )
record[0] = tmp;
}
{
if( record[1] < tmp+buf[i] )
record[1] = tmp+buf[i];
}
if( i+1 < n )
{
if( record[2] < tmp+buf[i]+buf[i+1] )
record[2] = tmp+buf[i]+buf[i+1];
}
}
return record[0]<record[1]?record[1]:record[0];
}
int main( void )
{
size_t n;
unsigned buf[10000];
scanf( "%zu", &n );
for( size_t i=0; i!=n; ++i )
scanf( "%u", buf+i );
printf( "%u\n", foo(buf,n) );
}
2019-08-20 10:46
2019-08-20 18:12