Vasya 正在玩一款新的电脑游戏 Energy Tycoon
游戏的规则非常简单:
有一行 �n 个空位。
有一些能源装置,每个能源装置会占用 11 或 22 个相邻的空位,并且每回合产生一个单位的能量。
在游戏里,每个回合可以建造一个新的能源装置(也可以不建造)。如果没有地方建新的能源装置,可以拆除一些旧的能源装置。
每一回合过后,电脑会统计这一回合内所有已经建造的能源装置产生的能量,并将其加到总分中。
Vasya 已经知道了每个回合他可以建造的能源装置的类型。现在他想知道,他能得到的最大分数是多少。你能帮他吗?
输入输出样例
输入 #13 21121输出 #1
10输入 #2
2 12输出 #2
2输入 #3
2 211输出 #3
4
#include<bits/stdc++.h> using namespace std; string s; long long n,res,now,f;//切记要开long long ,不开过不了 int main() { cin>>n; cin>>s; for(int i=0;i<s.size();i++) { if(s[i]=='2'&&n>=2)//如果是2并且空位足够 { f++; n-=2; now+=1; res+=now; // cout<<i<<"----"<<res<<endl; } else if(s[i]=='2'&&n<2) res+=now;//如果空位不够 if(s[i]=='1')//分情况 { if(n>=1) n-=1,now+=1,res+=now;//如果空位够,直接放 else if(f==0&&n<1) res+=now; //不够的话,如果没有2,那就不放 else if(f>0&&n<1) n+=1,f--,res+=now;//如果有2,那就把2拆了,反正价值是一样的,多个空位 //cout<<i<<"----"<<res<<"----"<<f<<endl; } } cout<<res; return 0; }