P7083 [NWRRC2013] Energy Tycoon

发布时间 2023-06-03 11:59:00作者: o-Sakurajimamai-o

Vasya 正在玩一款新的电脑游戏 Energy Tycoon

游戏的规则非常简单:

有一行 n 个空位。

有一些能源装置,每个能源装置会占用 11 或 22 个相邻的空位,并且每回合产生一个单位的能量。

在游戏里,每个回合可以建造一个新的能源装置(也可以不建造)。如果没有地方建新的能源装置,可以拆除一些旧的能源装置。

每一回合过后,电脑会统计这一回合内所有已经建造的能源装置产生的能量,并将其加到总分中。

Vasya 已经知道了每个回合他可以建造的能源装置的类型。现在他想知道,他能得到的最大分数是多少。你能帮他吗?

输入输出样例

输入 #1
3
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;
}