1 条题解

  • 3
    @ 2023-3-5 16:26:08

    我今天终于想起来了这道题…… 我当时好傻啊 没排序…… 得保证单调才能保证一定能搜到

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[1010];  //记录m种不同的面值.并由低到高排列}
    int money[25600]; //{记录可能出现的面额}
    int n,m;
    void search(int k,int j,int x)
     //k表示第k个已知面额,j表示可能已知面额的最多数量,x表示目前已构成的面额值
    {
     int i;
     if ((j==0)||(k==0)) return;
     for(i=j;i>=0;i--)
     {
       	x=x+a[k]*i;
       	j=j-i;
    	money[x]=money[x]+1;
        search(k-1,j,x);
        j=j+i;
        x=x-a[k]*i;
     }
    }
    int main()
    {
    	int i,j;
    	cin>>m>>n;
    	for(i=1;i<=m;i++)
    		cin>>a[i];
    	sort(a+1,a+m+1); 	 
    	search(m,n,0);
    	for(i=1;i<=n*a[m];i++)
    	 if(money[i]==0)
    	{
    	 	cout<<i-1<<endl;
    		break;
    	}
    	return 0;	
    }
    
    • 1

    信息

    ID
    417
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    72
    已通过
    15
    上传者