上面是我自己写的(TLE),下面是题解,请问时间复杂度分别多少
查看原帖
上面是我自己写的(TLE),下面是题解,请问时间复杂度分别多少
1413040
Hayya楼主2024/9/21 18:25
#include<bits/stdc++.h>
using namespace std;
int b[30]={20001},n,V;
int f(int n,int V,int a[])
{
	int min,tmp;
	if(n==0) return V;
	else
	{
	for(int i=0;i<=29;i++)
	{
		if(a[i]>0&&a[i]<=V)
		V-=a[i];tmp=a[i];
		a[i]=0;
		b[i]=f(n-1,V,a);a[i]=tmp;
	}
	min=b[0];
	for(int j=1;j<=29;j++)
	{
		if(min>b[j])
		min=b[j];
	}
	return min;
	}
}
int main()
{
	int a[30];
	cin>>V>>n;
	for(int k=0;k<n;k++)
	cin>>a[k];
	cout<<f(n,V,a);
	return 0;
}
#include<cstdio>
using namespace std;
int m,n;         
int f[20010];
int w[40];
int main(){
    int i,j;
    scanf("%d%d",&m,&n);
    for(i=1;i<=n;i++){
        scanf("%d",&w[i]);
    }
    for(i=1;i<=n;i++){
     for(j=m;j>=w[i];j--){        
      if(f[j]<f[j-w[i]]+w[i]){
      f[j]=f[j-w[i]]+w[i];
            }
        }
    }
    printf("%d\n",m-f[m]);
}
2024/9/21 18:25
加载中...