RT(因为太偏就没发在学术版) 在学校OJ做题,发现一个十分奇怪的问题:
#include <bits/stdc++.h>
using namespace std;
int n,m,t,a[200],z[200],f[200][200],s[200][200005],g[200][200];
int main()
{
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
cin>>a[i]>>z[i];
for(int i=1;i<=n;i++)
{
memset(s,0,sizeof(s));
int v=(n-i+1)*t;
for(int j=i;j<=n;j++)
{
for(int w=a[j];w<=v;w++)
s[j][w]=max(s[j-1][w],s[j-1][w-a[j]]+z[j]);
int vv=(j-i+1)*t;
g[i][j]=s[j][vv];
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int x=0;x<i;x++)
f[i][j]=max(f[i][j],f[x][j-1]+g[x+1][i]);
cout<<f[n][m];
}//TLE
#include <bits/stdc++.h>
using namespace std;
int n,m,t,a[200],z[200],f[200][200],s[200][20000],g[200][200];
int main()
{
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
cin>>a[i]>>z[i];
for(int i=0;i<=n;i++)
{
memset(s,0,sizeof(s));
int v=(n-i+1)*t;
for(int j=i;j<=n;j++)
{
for(int w=a[j];w<=v;w++)
s[j][w]=max(s[j-1][w],s[j-1][w-a[j]]+z[j]);
int vv=(j-i+1)*t;
g[i][j]=s[j][vv];
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int x=0;x<i;x++)
f[i][j]=max(f[i][j],f[x][j-1]+g[x+1][i]);
cout<<f[n][m];
}//WA(但是没TLE)
后来本蒟蒻觉得不服,又交了一次,这次只把
s[200][200005]
改成了
s[200][20005]
然后就不TLE了,求解为什么