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;
}