题目:
有红黑两种颜色的方块积木,红色代表正数A、黑色代表负数B,选出17块积木排成一排,使得任意相邻7块积木之和小于0;如何挑选才能使得17块积木之和最大,最大值是多少?
输入:
正数A、负数B;
A和B的绝对值均小于10000;
样例输入:
10 -61
样例输出:
28
思路:
用一个长度为7的滑动窗口即可解决问题。
实现:
1 #include <iostream>
2 #include <bits/stdc++.h>
3 using namespace std;
4
5 #include <iostream>
6 #include <cstdio>
7 #include <cstring>
8 #include <cmath>
9
10 int main() {
11
12 int a,b;
13 cin >> a >>
b;
14 int count =
0;
15 int sum =
0;
16 int num[
17];
17 for (
int i=
0;i<
7;i++
){
18 if(a*(i+
1)+b*(
6-i)<
0){
19 num[i]=
a;
20 sum = sum +
num[i];
21 count = count +
num[i];
22 }
else {
23 num[i]=
b;
24 sum = sum +
num[i];
25 count = count +
num[i];
26 }
27 }
28
29
30 for (
int i=
7;i<
17;i++
){
31 if (count - num[i-
7]+a<
0){
32 num[i]=
a;
33 count = count - num[i-
7]+
a;
34 sum = sum +
num[i];
35 }
else {
36 num[i]=
b;
37 count = count - num[i-
7]+
b;
38 sum = sum +
num[i];
39 }
40 }
41 cout << sum <<
endl;
42 }
转载于:https://www.cnblogs.com/TonvyLeeBlogs/p/9637540.html
相关资源:25个经典网站源代码