Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int int_cmp(const void* p1, const void* p2);
- int checkValidity(int* sol, int pos);
- int readFile(int nums[]);
- int powerset(int pos, int *val, int *sol, int k, int start, int max);
- int main()
- {
- FILE* fp1 = fopen("output.txt", "w");
- int nums[1000], sol[1000];
- int n, max=1, i;
- n = readFile(nums);
- qsort(nums, n, sizeof(int), int_cmp);
- max = powerset(0, nums, sol, n, 0, max);
- fprintf(fp1,"%d", max);
- }
- int readFile(int nums[]){
- FILE* fp = fopen("input.txt", "r");
- int n, i;
- fscanf(fp, "%d", &n);
- for(i=0;i<n;i++)
- fscanf(fp, "%d", &nums[i]);
- return n;
- }
- int int_cmp(const void *a, const void *b)
- {
- const int *ia = (const int *)a;
- const int *ib = (const int *)b;
- return *ia - *ib;
- }
- int powerset(int pos, int val[], int sol[], int k, int start, int max) {
- int i;
- if (start >= k)
- {
- if(pos>max && checkValidity(sol, pos))
- max=pos;
- return max;
- }
- for (i = start; i < k ; i++) {
- sol[pos] = val[i];
- max = powerset(pos+1, val, sol, k, i+1, max);
- }
- if(pos>max)
- max = powerset(pos, val, sol, k, k, max);
- return max;
- }
- int checkValidity(int sol[], int pos){
- int i;
- for(i=0;i<(pos-1);i++)
- if(sol[i+1]%sol[i] != 0)
- return 0;
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement