思路:
我们可以从大到小枚举最后分成的堆数 最后分成的堆数越多 操作数越小
sum可以整除堆数 且 sum能被均分成cnt个/堆
如何判断sum能不能被均分成cnt个/堆?
因为题目说能合并的石头堆是相邻的 所以依次枚举数组
s+=a[i]
- 如果s==cnt 则s=0
- 如果s>cnt 再继续加的话只会越来越大 所以这种情况无法相邻合并 即无解 return false
- 如果枚举完整个数组 说明可以被均分成cnt个/堆 return true
import java.util.*;
class Main
{
static int N=1000010;
static int[] a=new int[N];
static int n;
public static boolean ck(int cnt)
{
for(int i=0,s=0;i<n;i++)
{
s+=a[i];
if(s>cnt) return false;
if(s==cnt) s=0;
}
return true;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while(t-->0)
{
n=sc.nextInt();
int sum=0;
for(int i=0;i<n;i++)
{
a[i]=sc.nextInt();
sum+=a[i];
}
for(int i=n;;i--) //枚举堆数 堆数越大 操作数越小
if(sum%i==0&&ck(sum/i))
{
System.out.println(n-i);
break;
}
}
}
}