NOIP模拟七
最寄的一集,全场就我一个T1没写出来,正式赛要是这样真的就原地爆炸了……
遭报应了
T1
正解dp,珂以贪心,但是数据水,能hack一大堆人。
首先我们珂以得到一些结论:括号加在负号后面才对答案有贡献,题解说的是根据括号层数不超过二来设状态dp转移,但是我们珂以贪心来看。
我们先把所有数都加起来再看哪些是要减去的,我们珂以把连续的正数都缩在一起,这对答案是没有影响的,然后我们去找到把某一段正数给提出来之后让他后面那一段的负数珂以变正所得的最小值,当然也可以就把所有负数减了,来比较最小值。
code
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=114514,M=1919810,inf=1145141919810;
ll n,a[N],ans;
ll sum1,sum2,more=inf;
bool flag;
char c[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>a[1];
ans+=a[1]; c[1]='+';
for(int i=2;i<=n;++i){
cin>>c[i]>>a[i];
ans+=a[i];
if(c[i]=='-'){
if(flag) more=min(sum2+sum1,more);
flag=1,sum1=0;
sum2+=a[i];
}
else sum1+=a[i];
}
cout<<ans-min(more,sum2)*2;
return 0;
}
/*10
1-2+3-4+5-6+7-8+19-10*/ //这个数据能叉一堆人
T2T3T4都不想补/ng
頑張って