听灌佬多,求助,悬关
  • 板块灌水区
  • 楼主Fire__fly
  • 当前回复6
  • 已保存回复6
  • 发布时间2025/1/21 10:54
  • 上次更新2025/1/21 11:21:43
查看原帖
听灌佬多,求助,悬关
778283
Fire__fly楼主2025/1/21 10:54

P3736 15pts超标代码,样例过了,教练也不知道哪错了,别直接贴代码,谢谢

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 301
#define M 256
ll n,m,a[N],b[N],f[N][N][M],t[N][N][2],ans,ss[N],v;
int main() {
	cin>>n>>m;
	memset(f,-0x3f,sizeof(f)),memset(t,-0x3f,sizeof(t));
	for(ll i=1; i<=n; i++) cin>>ss[i],f[i][i][ss[i]]=0;
	for(ll i=0; i<(1<<m); i++) cin>>a[i]>>b[i];
	for(ll len=2; len<=n; len++) {
		v=(len-1)%(m-1);
		if(!v) v=m-1;
		v++;
		for(ll i=1,j=len; j<=n; i++,j++) {
			for(ll s=0; s<(1<<v); s++) {
				for(ll k=i; k<j; k++) f[i][j][s]=max(f[i][j][s],f[i][k][s>>1]+f[k+1][j][s&1]);
				if(v==m) t[i][j][a[s]]=max(t[i][j][a[s]],f[i][j][s]+b[s]);
				ans=max(ans,f[i][j][s]);
			}
			if(v==m) {
				for(ll s=0; s<(1<<v); s++) f[i][j][s]=-0x3f3f3f3f;
				f[i][j][0]=t[i][j][0],f[i][j][1]=t[i][j][1];
			}
			ans=max(ans,max(f[i][j][0],f[i][j][1]));
		}
	}
	cout<<ans;
	return 0;
}
2025/1/21 10:54
加载中...