当时用的二维数组超时了
然后试试用两个一维数组居然过了?? 哪位大佬能告诉我为啥么。。。
二维:
#include<bits/stdc++.h>
using namespace std;
int f[500][10005],t,n,m;
int cost[500][500];
int main(){
scanf("%d",&t);
scanf("%d",&n);
scanf("%d",&m);
for(int i=1;i<=t;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&cost[i][j]);
}
for(int i=1;i<t;i++)
{
for(int j=1;j<=m;j++)
f[0][j]=j;
for(int j=1;j<=n;++j)
{
for(int k=m;k>=0;--k)
{
f[j][k]=0;
for(int num=0;num<=k/cost[i][j];num++)
{
f[j][k]=max(f[j-1][k-cost[i][j]*num]+num*cost[i+1][j],f[j][k]);
}
}
}
m=f[n][m];
}
cout<<m<<endl;
return 0;
}
/*
2 3 100
10 20 15
15 17 13
*/
一维:
#include<bits/stdc++.h>
using namespace std;
int f[10005],t,n,m;
int a[102],b[102];
int main(){
scanf("%d",&t);
scanf("%d",&n);
scanf("%d",&m);
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<t;++i)
{
for (int j=1;j<=n;j++)
scanf("%d",&b[j]);
for(int j=0;j<=m;++j)
f[j]=j;
for(int j=1;j<=n;++j)
{
if (b[j]<=a[j]) continue;
for(int k=m;k>0;--k)
{
for(int num=1;num<=k/a[j];++num)
{
f[k]=max(f[k-a[j]*num]+num*b[j],f[k]);
}
}
}
m=f[m];
for (int j=1;j<=n;j++)
a[j]=b[j];
}
cout<<m<<endl;
return 0;
}
求助