1 条题解
-
0
C :
#include <stdio.h> #include <string.h> int time; int stuff[20]; void check(int sum, int i, int n) { if(i == n+1) // fail return; else if(sum == 40){ time++; return; }else if(sum < 40){ check(sum, i+1, n); check(sum+stuff[i], i+1, n); }else if(sum > 40) return; return ; } int main() { int n; while(scanf("%d", &n) != EOF){ memset(stuff, 0, sizeof(stuff)); time=0; for(int i = 0; i < n; i++) scanf("%d", stuff + i); check(0, 0, n); printf("%d\n", time); } return 0; }
C++ :
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; int a[20]; int n; void compute(int a[],int &sum,int k,int left){//递归函数 //cout<<"left="<<left<<endl; if(left==0){ sum++; return; } else{ if(k>=n||a[k]>left)return; else{ for(int i=k;i<n;i++) compute(a,sum,i+1,left-a[i]); } } } int main(void){ int sum; while(scanf("%d",&n)!=EOF){ sum=0; for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); compute(a,sum,0,40); printf("%d\n",sum); } return 0; }
Java :
import java.io.BufferedInputStream; import java.util.Arrays; import java.util.Scanner; public class Main{ static int n; static int arr[]; public static void main(String[] args) { Scanner s = new Scanner(new BufferedInputStream(System.in)); while(s.hasNextInt()){ n = s.nextInt(); arr = new int[n]; for(int i=0;i<n; i++) arr[i] = s.nextInt(); System.out.println(f(n-1,40)); } } static int f(int n,int sum){ if(sum < 0) return 0; if(sum == 0) return 1; if(n==0) return arr[0] == sum ? 1:0; else return f(n-1,sum)+f(n-1,sum-arr[n]); } }
- 1
信息
- ID
- 1163
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者