求助P5662纪念品
  • 板块学术版
  • 楼主蒟蒻酱
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/9/20 11:51
  • 上次更新2023/11/5 12:54:51
查看原帖
求助P5662纪念品
186730
蒟蒻酱楼主2020/9/20 11:51

当时用的二维数组超时了

然后试试用两个一维数组居然过了?? 哪位大佬能告诉我为啥么。。。

二维:

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

求助

2020/9/20 11:51
加载中...