- 子矩阵(submatrix)
- @ 2023-07-18 19:15:09
回来看看二中的域,顺手抢个最优解
41ms
Accepted
Status Time Cost Memory Cost
#1 Accepted 2ms 480.0 KiB
#2 Accepted 2ms 476.0 KiB
#3 Accepted 1ms 344.0 KiB
#4 Accepted 1ms 576.0 KiB
#5 Accepted 1ms 352.0 KiB
#6 Accepted 5ms 576.0 KiB
#7 Accepted 7ms 572.0 KiB
#8 Accepted 2ms 576.0 KiB
#9 Accepted 5ms 576.0 KiB
#10 Accepted 10ms 568.0 KiB
#include<bits/stdc++.h>
using namespace std;
int n,m,r,c,a[17][17],k[17],ans=INT_MAX;
int zz[17][17][17],ymq[17][17][17];
int d[17],sum[17][17],dp[17][17];
int in()
{
int k=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
void out(int x)
{
if(x<0)putchar('-'),x=-x;
if(x<10)putchar(x+'0');
else out(x/10),putchar(x%10+'0');
}
void dfs(int dep)
{
if(r+1-dep>n-k[dep-1]) return;
if(dep==r+1)
{
for(int j=1;j<=m;j++)
{
d[j]=0;
for(int i=1;i<=r;i++)
d[j]+=zz[k[i]][k[i+1]][j];
}
for(int i=1;i<=m;i++)
for(int j=i+1;j<=m;j++)
{
sum[i][j]=0;
for(int t=1;t<=r;t++)
sum[i][j]+=ymq[i][j][k[t]];
}
for(int i=1;i<=m;i++)
for(int j=1;j<=c;j++)
{
dp[i][j]=0x3f3f3f3f;
for(int k=j-1;k<i;k++)
dp[i][j]=min(dp[i][j],dp[k][j-1]+sum[k][i]);
dp[i][j]+=d[i];
if(j==c&&c<=i&&i<=m)
ans=min(ans,dp[i][c]);
}
return;
}
for(int i=k[dep-1]+1;i<=n;i++)
{
k[dep]=i;
dfs(dep+1);
}
}
int main()
{
n=in();m=in();r=in();c=in();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=in();
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
for(int k=1;k<=m;k++)
zz[i][j][k]=zz[j][i][k]=abs(a[i][k]-a[j][k]);
for(int i=1;i<=m;i++)
for(int j=i+1;j<=m;j++)
for(int k=1;k<=n;k++)
ymq[i][j][k]=ymq[j][i][k]=abs(a[k][i]-a[k][j]);
dfs(1);
out(ans);
return 0;
}
0 条评论
目前还没有评论...
信息
- ID
- 1520
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 31
- 已通过
- 2
- 通过率
- 6%
- 被复制
- 6
- 上传者