分析:从前往后递推第一个和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; }
时间: 2024-10-10 01:01:16