Advertisement
petromaxa

Untitled

Dec 11th, 2012
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace _5.Problem_SubsetSums
  7. {
  8. class Program
  9. {
  10. static void Main()
  11. {
  12. bool isLong = true;
  13. byte elementsEqualToS = 0;
  14. long S = long.Parse(Console.ReadLine());
  15. int N = int.Parse(Console.ReadLine());
  16. long[] longNumbers = new long[N];
  17. if (N > 0 && N < 17)
  18. {
  19. for (int i = 0; i < N; i++)
  20. {
  21. isLong = long.TryParse(Console.ReadLine(), out longNumbers[i]);
  22. if (isLong == false)
  23. {
  24. break;
  25. }
  26. if (longNumbers[i] == S)
  27. {
  28. elementsEqualToS++;
  29. }
  30. }
  31. if (isLong)
  32. {
  33. Console.WriteLine(FindSubsetSum(longNumbers, S) + elementsEqualToS);
  34. }
  35. else
  36. {
  37. Console.WriteLine("Wrong entry! Some of the numbers are not long!");
  38. }
  39. }
  40. else
  41. {
  42. Console.WriteLine("Wrong entry! The members of the sequence are not between 1 and 16!");
  43. }
  44. }
  45. private static int FindSubsetSum(long[] numbers, long S)
  46. {
  47. int numberOfSubsets = 0;
  48. int allSubsets = (int)Math.Pow(2, numbers.Length);
  49. long[] dynamicSums = new long[allSubsets];
  50. for (int i = 1; i < numbers.Length; i++)// numbers in the array
  51. {
  52. int j, k;
  53. for (j = 0; j < ((1 << i) - (i + 1)); j++)// the sum with already summed elements
  54. {
  55.  
  56. if ((dynamicSums[(1 << i) - (i + 1) + j] = numbers[i] + dynamicSums[j]) == S)
  57. {
  58. numberOfSubsets++;
  59. }
  60. }
  61. for (k = 0; k < i; k++)// the sums with the new elements
  62. {
  63. if ((dynamicSums[(1 << i) - (i + 1) + (j + k)] = numbers[k] + numbers[i]) == S)
  64. {
  65. numberOfSubsets++;
  66. }
  67. }
  68. }
  69. return numberOfSubsets;
  70. }
  71. }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement