using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
public static bool CanPartitionKSubsets(int[] nums, int k) {
for(int i=0; i < nums.Length; i++)
int targetSum = totalSum / k;
used = new bool[nums.Length];
Array.Sort(nums, new Comparison<int>((i1, i2) => i2.CompareTo(i1)));
return backtrack(0, k, 0, nums, targetSum);
private static bool[] used;
private static bool backtrack(int i, int k, int subsetSum, int[] nums, int target)
return backtrack(0, k-1, 0, nums, target);
for(int j =i; j < nums.Length; j++)
if(used[j] || subsetSum + nums[j] > target)
if(backtrack(j+1, k, subsetSum+nums[j], nums, target))