关于常熟
查看原帖
关于常熟
416192
kbzcz楼主2024/1/13 08:56
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,是因为什么?

2024/1/13 08:56
加载中...