以下是AC代码:
#include<bits/stdc++.h>
using namespace std;
int f[5005][55];
int f1[5010][55];
int K,V,n,v[205],w[205];
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>K>>V>>n;
memset(f,128,sizeof(f));
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
f[0][1]=0;
for(int i=1;i<=n;i++)
{
for(int j=V;j>=v[i];j--)
{
for(int J=1;J<=K;J++)
f1[j][J]=f[j][J];
int t1=1,t2=1;
for(int k=1;k<=K;k++)
{
if(f1[j][t1]>f[j-v[i]][t2]+w[i])
f[j][k]=f1[j][t1++];
else
f[j][k]=f[j-v[i]][t2++]+w[i];
}
}
}
int sum=0;
for(int i=1;i<=K;i++)
sum+=f[V][i];
cout<< sum;
return 0;
}
这个是:源代码:
#include<bits/stdc++.h>
using namespace std;
int f[205][5005][55];
int K,V,n,v[205],w[205];
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>K>>V>>n;
memset(f,128,sizeof(f));
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
f[i][0][1]=0;
for(int i=1;i<=n;i++)
{
for(int j=V;j>=v[i];j--)
{
int t1=1,t2=1;
for(int k=1;k<=K;k++)
{
if(f[i-1][j][t1]>f[i-1][j-v[i]][t2]+w[i])
f[i][j][k]=f[i-1][j][t1++];
else
f[i][j][k]=f[i-1][j-v[i]][t2++]+w[i];
}
}
}
int sum=0;
for(int i=1;i<=K;i++)
sum+=f[n][V][i];
cout<< sum;
return 0;
}
除内存外,为何一个AC了,一个连样例都过不了
这不算讨论区题解吧