1 条题解

  • 0
    @ 2025-2-14 21:20:42

    C :

    #include<stdio.h>
    int v[1001]={0};
    int main()
    {
    	int A,B,C,D,E,F;
    	int s=0;
    	scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&E,&F);
    	int a,b,c,d,e,f;
    	for(a=0;a<=A;a++)
    	for(b=0;b<=B;b++)
    	for(c=0;c<=C;c++)
    	for(d=0;d<=D;d++)
    	for(e=0;e<=E;e++)
    	for(f=0;f<=F;f++)
    	{
    		s=a*1+b*2+c*3+d*5+e*10+f*20;
    		v[s]=1;
    	}
    	int i;
    	int count=0;
    	for(i=1;i<=1000;i++)
    	if(v[i])count++;
    	printf("Total=%d",count);
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    int sum;  ///表示输入的砝码的总质量
    int ma[6];  ///六种砝码的个数
    int weight[6]={1,2,3,5,10,20};  ///六种砝码的重量
    char dp[1001]; ///标记位
    
    void input();   ///输入每个砝码的数量,并求出所有砝码的总质量sum
    void exeDP();
    void output();  ///判断标记为1的数量,并输出
    
    int main()
    {
        memset(dp,0,sizeof(dp));
        input();
        exeDP();
        output();
        return 0;
    }
    
    void input()
    {
        int i;
        sum=0;
        for(i=0;i<6;i++)
        {
            scanf("%d",&ma[i]);
            sum=sum+(ma[i]*weight[i]);
        }
    }
    
    void exeDP()
    {
        int i,j,z;
        dp[0]=1;
        for(i=0;i<6;i++)    ///六种砝码
        {
            for(j=0;j<ma[i];j++)    ///每种砝码的个数
            {
                for(z=sum;z>=weight[i];z--) ///判断每种质量是否可以被称出
                {
                    if(dp[z-weight[i]]==1)
                        dp[z]=1;
                }
            }
        }
    }
    
    void output()
    {
        int i,time=0;
        for(i=1;i<=sum;i++)
        {
            if(dp[i]==1)    ///若能被称出,则计数
                time++;
        }
        cout<<"Total="<<time;
    }
    

    Pascal :

    var c,a,f:Array[0..2000]of longint;
    i,j,k,ans:longint;
    begin
     // assign(input,'weight.in'); reset(input);
      //assign(output,'weight.out'); rewrite(output);
      for i:=1 to 6 do read(a[i]);
      c[1]:=1;
      c[2]:=2;
      c[3]:=3;
      c[4]:=5;
      c[5]:=10;
      c[6]:=20;
      f[0]:=1;
      for i:=1 to 6 do
      for k:=1 to a[i] do
      for j:=1000 downto c[i] do if f[j-c[i]]=1 then f[j]:=1;
      for i:=1 to 1000 do if f[i]=1 then inc(ans);
      writeln('Total=',ans);
     // close(output);
    end.
    
    • 1

    信息

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