| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 91439 | sh25_zhoumy | 子矩阵-NOIP2014PJT4 | C++ | 通过 | 39 MS | 260 KB | 1260 | 2026-06-12 15:45:49 |
#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; }