1 条题解

  • 0
    @ 2024-12-22 11:04:04

    C :

    #include "stdio.h"
    int n,s;
    int a[50],f[50001];
    int main()
    {
    	int i,j;
    	scanf("%d",&n);
    	s=0;
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    		s+=a[i];
    	}
    	if(s%2)
    		printf("0\n");
    	else
    	{
    		f[0]=1;
    		s/=2;
    		for(i=0;i<n;i++)
    		{
    			for(j=s;j>=a[i];j--)
    				if(f[j-a[i]])
    					f[j]+=f[j-a[i]];
    		}
    		printf("%d\n",f[s]/2);
    	}
    	return 0;
    }
    

    C++ :

    #include<iostream>  
    #include<cstdio>  
    #include<cstring>  
    using namespace std;  
    int dp[51][3010], p[55];  
    int main()  
    {  
    //  freopen("a.txt","r",stdin);  
        int n, i, j, k;  
        while(cin >> n)  
        {  
            memset(dp,0,sizeof(dp));  
            int sum(0);  
            for(i = 1; i <= n; ++ i)  
            {  
                cin >> p[i];  
                sum += p[i];  
            }  
            if(sum % 2) { cout << '0' << endl; continue; }  
            dp[0][0] = 1;  
            for(i = 1; i <= n; ++ i)  
            {  
                for(j = 0; j <= sum/2; ++ j)  
                {  
                    dp[i][j] = dp[i-1][j];  
                    if(j - p[i] >= 0)  
                         dp[i][j] = dp[i][j] + dp[i-1][j-p[i]];  
                }  
            }  
            cout << dp[n][sum/2]/2 << endl;  
        }  
        return 0;  
    }  
    
    • 1

    信息

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