分析:从前往后递推第一个和sum,然后往后依次划分,当第一次能够划分完,就得到最小的结果了。
#include<iostream>
using namespace std;
int a[10005];
int P,M,T,K;
void solve()
{
int sum,cursum,i,j,j2;
bool flag;
flag=false;
for(i=0,j2=0,sum=0;i<M;i++)
{
for(;j2<=i;j2++)
sum+=a[j2];
j=j2;
cursum=0;
while(j<M)
{
cursum+=a[j];
if(cursum>sum)
break;
else if(cursum==sum)
{
j++;
if(j==M)
{
cout<<K<<" "<<cursum<<endl;
flag=true;
}
cursum=0;
}
else
j++;
if(flag) break;
}
if(flag) break;
}
if(i==M)
cout<<K<<" "<<sum<<endl;
}
int main()
{
int i;
ios::sync_with_stdio(false);
cin>>T;
while(T--)
{
cin>>K>>M;
for(i=0;i<M;i++)
cin>>a[i];
solve();
}
return 0;
}
HDU ACM 3280 Equal Sum Partitions
原文地址:http://blog.csdn.net/a809146548/article/details/45787975