题目描述
众所周知,清楚姐姐最近迷上了一个老年游戏“山楂串”(点进去可以玩)这个游戏中我们可以将3或4个iii级糖果合并,升级成为一个高一级的糖果并且获得x∗ix*ix∗i点积分,xxx为消耗同级糖果的数量,iii为你消耗的糖果等级,当你拥有了一个9级糖果也就代表你有了一串山楂串,这个时候你的9级糖果就会消失。
请问 如果给定你每级若干个糖果,你最多能得到多少积分。
qcjj的记录:
输入描述:
第一行输入8个非负整数 ai≤109a_i \leq 10^9ai≤109分别代表iii级糖果的数量。
输出描述:
一个正整数输出你获得的最高积分。
示例1
输入
3 3 2 2 2 2 2 2
输出
110
说明
我们将1级糖果拿3个出来全部合并 获得3点积分并得到一个2级糖果
我们将2级糖果拿4个出来全部合并 获得8点积分并得到一个3级糖果
我们将3级糖果拿3个出来全部合并 获得9点积分并得到一个4级糖果
我们将4级糖果拿3个出来全部合并 获得12点积分并得到一个5级糖果
我们将5级糖果拿3个出来全部合并 获得15点积分并得到一个6级糖果
我们将6级糖果拿3个出来全部合并 获得18点积分并得到一个7级糖果
我们将7级糖果拿3个出来全部合并 获得21点积分并得到一个8级糖果
我们将8级糖果拿3个出来全部合并 获得24点积分并得到一个9级糖果
9级糖果全部消失
最终我们的得分为
3+8+9+12+15+18+21+24=110
代码如下:
#include<iostream>
#include<cstring>
long long int a[10];
long long int res = 0;
int main(){
memset(a, 0, sizeof(a));
for(int i = 1; i <= 8; i ++){
std::cin >> a[i];
}
for(int i = 1; i <= 8; i ++){
if(a[i] <= 5){
if(a[i] > 3){
res += 4 * i;
a[i + 1] += 1;
}
if(a[i] == 3){
res += 3 * i;
a[i + 1] += 1;
}
}
else{
while(a[i] % 3 != 0){
a[i] -= 4;
res += 4 * i;
a[i + 1] += 1;
}
if(a[i] % 3 == 0){
res += a[i] * i;
a[i + 1] += a[i] / 3;
continue;
}
}
}
std::cout << res;
return 0;
}