题目:
有红黑两种颜色的方块积木,红色代表正数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 }