题目中有个限制就很~~***~~
尽可能让前面的人少抄写
我不知道咋调(代码有点丑
#include<bits/stdc++.h>
using namespace std;
int m,k,a[150],dp[150][150][150],w[150];
int ans[150][150][150];
void print(int l,int r,int q){
if(q==0)return ;
print(l,ans[l][r][q]-1,q-1);
cout<<ans[l][r][q]<<' '<<r<<endl;
}
int main()
{
cin>>m>>k;
for(int i=1;i<=m;i++) cin>>a[i],w[i]=w[i-1]+a[i];
memset(dp,0x3f,sizeof(dp));
dp[0][0][0]=0;
for(int i=1;i<=m;i++) dp[i][i][1]=a[i],ans[i][i][1]=i;;
for(int i=1;i<=m;i++)
for(int j=i;j<=m;j++)
dp[i][j][0]=0,dp[i][j][1]=w[j]-w[i-1],ans[i][j][1]=i;
for(int len=1;len<=m;len++)
for(int i=1;i+len-1<=m;i++){
int j=i+len-1;
for(int k=i;k<j;k++)
for(int q=2;q<=k;q++){
if(dp[i][j][q]>max(dp[i][k][q-1],w[j]-w[k])){
dp[i][j][q]=max(dp[i][k][q-1],w[j]-w[k]);
ans[i][j][q]=k+1;
}
}
}
print(1,m,k);
return 0;
}