C. Gourmet Cat
题目大意
波利卡普有一只猫,周一、周四和周日他吃鱼,周二和周六他吃炖兔子,在其他的日子里,他吃鸡排。波利卡普打算去旅行,他已经收拾好了背包。他的背包里有:a个鱼类食物,b个炖兔肉,c个鸡排;波利卡普必须选择一周中的某一天开始他的旅行,让他的猫可以尽可能长时间地吃东西打印出猫在一次旅行中不需要额外购买食物的最大天数。
题目分析
先算出食物可以满足的整周数,剩下的再枚举从那一天开始可以坚持的天数,可以通过数组记录从每天出发的答案,选出最大值。
code
#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int a, b, c;
int f[N];
void solve()
{
cin >> a >> b >> c;
int res = 0x3f3f3f3f;
if(a >= 3 && b >= 2 && c >= 2)
{
res = min(res, a / 3);
res = min(res, b / 2 );
res = min(res, c / 2);
a -= 3 * res;
b -= 2 * res;
c -= 2 * res;
}
if(res < 0x3f3f3f3f)for(int i = 1; i <= 7; i ++) f[i] += res * 7;
int ra, rb, rc;
for(int i = 1; i <= 7; i ++)
{
ra = a, rb = b, rc = c;
for(int j = i; j <= 7; j ++)
{
if(j == 1 || j == 4 || j ==7)
{
if(!ra) break;
f[i] ++, ra --;
}
else if(j == 2 || j == 6)
{
if(!rb) break;
f[i] ++, rb --;
}
else if(j == 3 || j == 5)
{
if(!rc) break;
f[i] ++, rc --;
}
if(j == 7) j = 0;
}
}
int ans = 0;
for(int i = 1; i <= 7; i ++) ans = max(ans, f[i]);
cout << ans << "\n";
}
int main()
{
solve();
return 0;
}