两个程序有什么区别。
查看原帖
两个程序有什么区别。
104487
Shui_Dream楼主2020/5/31 18:31

以下是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了,一个连样例都过不了 这不算讨论区题解吧

2020/5/31 18:31
加载中...