求大神指点迷津,这段代码怎么修改,才可以AC.
例如输入: {4, 3, 2, 3, 5, 2, 1}
5
如果不经过排序,是TRUE,经过排序就是FLASE。 提交的时候把qsort去掉后,卡在了用例
[10,10,10,7,7,7,7,7,7,6,6,6]
3
代码如下:
#define true 1
#define false 0
#define bool int
#define N 17
int vis[N] = {0};
int my_cmp(const void* a, const void* b)
{
int *pa = (int*)a;
int *pb = (int*)b;
return *pa - *pb;
}
int dfs(int* nums, int numsSize, int target, int sum, int box)
{
int i = 0;
if (box == 0) {
return true;
}
for (i = 0; i < numsSize ; ++i) {
if (vis[i] == 0 ) {
vis[i] = 1;
if (sum + nums[i] == target && (sum + nums[i] <= target)) {
return dfs(nums, numsSize, target, 0, box - 1);
}
else if (dfs(nums, numsSize, target, sum + nums[i], box)) {
return true;
}
vis[i] = 0;
}
}
return false;
}
bool canPartitionKSubsets(int* nums, int numsSize, int k)
{
int sum = 0;
int i, target;
memset(vis, 0, sizeof(vis));
for (i = 0; i <numsSize; i++) {
sum += nums[i];
}
if (sum % k != 0) {
return false;
}
target = sum / k;
return dfs(nums, numsSize, target, 0, k);
}
int main()
{
int nums[]= {4, 3, 2, 3, 5, 2, 1};
int res = 0;
int i;
qsort(nums, sizeof(nums) / sizeof(int), sizeof(int), my_cmp);
res = canPartitionKSubsets(nums, sizeof(nums) / sizeof(int), 4);
printf("%d\n",res);
}