提交时间:2026-06-12 15:09:14
运行 ID: 91142
#include <bits/stdc++.h> using namespace std; int n,m,r,c,a[17][17],ans=0x3f3f3f3f,cc[17],s1[17],s2[17][17],f[17][17]; int main() { cin>>n>>m>>r>>c; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int jj=0;jj<(1<<n);jj++) { int cnt=0; for(int i=0;i<=n;i++) if(jj&(1<<i)) { cc[cnt]=i+1; cnt++; } if(cnt!=r) continue; for(int i=1;i<=m;i++) { s1[i]=0; for(int j=0;j<cnt-1;j++) s1[i]+=abs(a[cc[j]][i]-a[cc[j+1]][i]); for(int k=i+1;k<=m;k++) { s2[i][k]=0; for(int j=0;j<cnt;j++) s2[i][k]+=abs(a[cc[j]][i]-a[cc[j]][k]); } } for(int i=1;i<=m;i++) for(int j=1;j<=c;j++) f[i][j]=0x3f3f3f3f; f[0][0]=0; for(int i=1;i<=m;i++) { f[i][1]=s1[i]; for(int j=2;j<=c;j++) for(int k=1;k<i;k++) f[i][j]=min(f[i][j],f[k][j-1]+s1[i]+s2[k][i]); ans=min(ans,f[i][c]); } } cout<<ans; }