bool _Start;
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define Tp template<typename T>
#define Ts template<typename T,typename... _T>
Tp il void read(T& x) {
x=0;bool f=0;char c=getchar();
for(;c<'0'||c>'9';c=getchar()) f|=c=='-';
for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
x=(f?-x:x);
}Ts il void read(T& x,_T&... y) {read(x),read(y...);}
const int N=2e5+5;
const char bs[]="_bessie";
int n;
char s[N];
struct node {
int x,y;
}f[N][7];
int val[N],ans,cst;
il node mymin(node a,node b) {
if(a.x!=b.x) return a.x>b.x?a:b;
return a.y<b.y?a:b;
}
bool _End;
int main() {
fprintf(stderr,"Memory: %.4lf Mib\n",(&_End-&_Start)/1048576.0);
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++) read(val[i]);
for(int i=0;i<=n;i++) {
for(int j=0;j<=6;j++) f[i][j].x=0,f[i][j].y=1e9;
}
f[0][0]={0,0};
for(int i=1;i<=n;i++) {
f[i][0]=f[i-1][0];
for(int k=1;k<=6;k++) {
f[i][0]=mymin(f[i][0],f[i-1][k]);
if(s[i]==bs[k]) f[i][k]=f[i-1][k-1];
f[i][k]=mymin(f[i][k],node{f[i-1][k].x,f[i-1][k].y+val[i]});
}
if(f[i][6].y!=1e9) f[i][0]=mymin(f[i][0],node{f[i][6].x+1,f[i][6].y});
}
// for(int i=1;i<=n;i++) {
// for(int j=0;j<=6;j++) cerr<<f[i][j].x<<" "<<f[i][j].y<<" ";
// cerr<<endl;
// }
cst=1e9;
for(int i=1;i<=n;i++) {
for(int j=0;j<=6;j++) {
if(f[i][j].x>ans) ans=f[i][j].x,cst=f[i][j].y;
else if(f[i][j].x==ans) cst=min(cst,f[i][j].y);
}
}
printf("%d\n%d",ans,cst);
return 0;
}
上面的代码如果不注释只有25pts,但注释了就AC了,而且才200多ms,是因为什么?