1 条题解
-
0
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; }
Pascal :
{$N+} const ipf = 'compete.in'; opf = 'compete.out'; var a : array[0..2500]of extended; c : array[1..50]of byte; i,j,k,n : word; s : longint; begin {assign(input,ipf); reset(input); assign(output,opf); rewrite(output);} repeat readln(n); if n = 0 then break; s := 0; for i := 1 to n do begin read(c[i]); s := s+c[i]; end; readln; if odd(s) then writeln(0) else begin fillchar(a,sizeof(a),0); a[0] := 1; for i := 1 to n do for j := s div 2-c[i] downto 0 do a[j+c[i]] := a[j+c[i]]+a[j]; writeln(a[s div 2]/2:0:0); end; until false; {close(input); close(output);} end.
- 1
信息
- ID
- 814
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者