1 条题解

  • 0
    @ 2025-4-12 22:06:17

    C :

    #include <stdio.h>
    int huffman(int n,int p[100]);
    int main()
    {
    	int m;
    	scanf("%d",&m);
    	int i,j;
    	int n;
    	int p[100];
    	int sum[10];
    	for(i=0;i<m;i++)
    	{
    		scanf("%d",&n);
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&p[j]);
    		}
    		sum[i]=huffman(n,p);
    
    	}
    	for(i=0;i<m;i++)
    	{
    		printf("%d\n",sum[i]);
    	}
    	return 0;
    }
    int huffman(int n,int *p)
    {
    	
    	int a=0;
    	int b=1;
    	int i;
    	int j=0;
    	int sum=0;
    	while(j<n-1)
    	{
    		for(i=0;i<n;i++)
    		{
    			if(p[a]>p[i]&&i!=b)
    			{
    				a=i;
    			}
    		}
    		for(i=0;i<n;i++)
    		{
    			if(p[b]>p[i]&&i!=a)
    			{
    				b=i;
    			}
    		}
    		p[a]=p[a]+p[b];
    		p[b]=1000000;
    		sum+=p[a];
    		j++;
    	}
    	return sum;	
    }
    

    C++ :

    #include <stdio.h>
    
    int main()
    {
        //freopen("1.txt","r",stdin);
    	//freopen("2.txt","w",stdout);
    	
    	int M;
    	scanf("%d", &M);
    	while(M--) {
    		int i, j, k, l, n;
        	int count = 0;
        	scanf("%d", &n);
        	int a[999];
        	for (i = 0; i < n; i++)
         	   	scanf("%d", &a[i]);
        	for (i = n; i > 1; i--)
        	{
          	  	k = 0, l = 1;
     	  	  	if (a[0] < a[1])
                k = 1, l = 0;
            	for (j = 2; j < i; j++)
            	{
                	if (a[j] <= a[k])
                	{
                   	 	if (a[j] < a[l])
                        	k = l, l = j;
          	         	else
                        	k = j;
                	}
            	}
            	a[l] += a[k];
            	count += a[l];
            for (j = k; j < i - 1; j++)
                a[j] = a[j + 1];
        	}
        	printf("%d\n", count);
    	} 	
        return 0;
    }
    
    
    • 1

    信息

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