Equal Sum Partitions
Time Limit: 1000MS |
Memory Limit: 65535KB |
Submissions: 111 |
Accepted: 45 |
Sample Input
3
1 6
2 5 1 3 3 7
2 6
1 2 3 4 5 6
3 20
1 1 2 1 1 2 1 1 2 1
1 2 1 1 2 1 1 2 1 1
Sample Output
1 7
2 21
3 2
解析:
由2 5 1 3 3 7分为(2 5)(1 3 3)(7)可以清晰看出这道题是对这列数进行最小均分,肯定就会用到DFS思想(递归),实现过程看代码吧:
# include<stdio.h>
int sign[10005];
int num,res,leap;
int solve(int sum,int index)
{
if(index==num&&leap==0)//满足条件
{
res=sum;
return 1;
}
else if(index==num)//对应的sum不满足
return 0;
leap+=sign[index];//leap为暂时计数器
if(sum==leap)
{
leap=0;
return solve(sum,index+1);
}
else if(sum>leap)
return solve(sum,index+1);
else return 0;
}
int main()
{
int nCase;
int cnt,sum,i;
scanf("%d",&nCase);
while(nCase--)
{
scanf("%d %d",&cnt,&num);
sum=0;
for(i=0;i<num;i++)
scanf("%d",&sign[i]);
for(i=0;i<num;i++)
{
sum+=sign[i];
leap=0;
if(solve(sum,i+1))break;//如果不满足,sum就会逐渐往后加
}
printf("%d %d\n",cnt,res);
}
return 0;
}