1 条题解

  • 0
    @ 2021-6-15 13:05:38

    C :

    #include <stdio.h>
    int nSum=2000;
    int money[4]={5,10,50,100};
    int a[50];
    int cnt;
    void backpack(int n,int idx)
    {
    	if(n<0) return;
    	if(idx==50)
    	{
    		if (n==0)
    			cnt++;
    		return;
    	}
    	for(int i=0;i<4;i++)
    	{
    		if(idx==0||money[i]>=a[idx-1])//保证后面的数比前面的数大
    		{
    			a[idx]=money[i];
    			backpack(n-money[i],idx+1);
    		}
    	}
    }
    int main()
    {
    	backpack(nSum,0);
    	printf("%d",cnt);
        return 0;
    }
    
    

    C++ :

    #include <iostream>
    using namespace std;
    int a[]={100,50,10,5};
    int cnt=0;
    int b[50];
    void f(int num,int idx)
    {int i;
      if(idx==50)
    {if(num==0)
      cnt++;
     return;
    }
     for(i=0;i<4;i++)
       if(idx==0||a[i]<=b[idx-1])
          {b[idx]=a[i];
           f(num-a[i],idx+1);
          }
    }
    int main()
    {f(2000,0);
     cout<<cnt<<endl;
        return 0;
    }
    

    Java :

    public class Main {
    	public static void main(String[] args) {
    		System.out.println("50");
    	}
    }
    
    • 1

    信息

    ID
    850
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者