【DP】BZOJ1084(SCOI2005)[最大子矩阵]题解
2017-11-05 16:07
260 查看
题目概述
有一个 n×m ( m≤2 )的矩阵,选出其中 k 个子矩阵,使得这 k 个子矩阵分值之和最大。选出的 k 个子矩阵不能相互重叠。解题报告
因为只有两列……所以随便定义一下就行了。定义 f[i][s][k] 表示前 i 行,第 i 行的状态为 s ,选了 k 个子矩阵的最优解,状态有:
0 :不选第 i 行。
1 :选第 i 行第一列。
2 :选第 i 行第二列。
3 :选第 i 行第一列和第二列,两列不连接。
4 :选第 i 行第一列和第二列,两列连接。
仔细转移一下就行了,详见代码。效率 O(nk) 。
示例程序
代码巨丑……#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100,maxk=10; int n,m,K,pic[maxn+5][2],f[maxn+5][5][maxk+5],ans; int main() { freopen("program.in","r",stdin); freopen("program.out","w",stdout); scanf("%d%d%d",&n,&m,&K); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&pic[i][j]); memset(f,192,sizeof(f));ans=f[0][0][0];f[0][0][0]=0; for (int i=1;i<=n;i++) for (int k=0;k<=K;k++) { for (int j=0;j<=4;j++) f[i][0][k]=max(f[i][0][k],f[i-1][j][k]); f[i][1][k]=max(f[i-1][1][k],f[i-1][3][k]); if (k) for (int j=0;j<=4;j++) f[i][1][k]=max(f[i][1][k],f[i-1][j][k-1]); f[i][1][k]+=pic[i][1]; if (m==1) continue; f[i][2][k]=max(f[i-1][2][k],f[i-1][3][k]); if (k) for (int j=0;j<=4;j++) f[i][2][k]=max(f[i][2][k],f[i-1][j][k-1]); f[i][2][k]+=pic[i][2]; f[i][3][k]=f[i-1][3][k]; if (k) f[i][3][k]=max(f[i][3][k],f[i-1][3][k-1]); if (k) f[i][3][k]=max(f[i][3][k],max(f[i-1][1][k-1],f[i-1][2][k-1])); if (k>1) for (int j=0;j<=4;j++) f[i][3][k]=max(f[i][3][k],f[i-1][j][k-2]); f[i][3][k]+=pic[i][1]+pic[i][2]; f[i][4][k]=f[i-1][4][k]; if (k) for (int j=0;j<=4;j++) f[i][4][k]=max(f[i][4][k],f[i-1][j][k-1]); f[i][4][k]+=pic[i][1]+pic[i][2]; } for (int j=0;j<=4;j++) ans=max(ans,f [j][K]); return printf("%d\n",ans),0; }
相关文章推荐
- bzoj1084 [SCOI2005]最大子矩阵(dp)
- [BZOJ1084][SCOI2005]最大子矩阵(dp)
- 【BZOJ】1084: [SCOI2005]最大子矩阵(DP)
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
- [bzoj1084][SCOI2005]最大子矩阵(DP)
- bzoj1084: [SCOI2005]最大子矩阵(Dp)
- 【BZOJ 1084】 [SCOI2005]最大子矩阵(DP)
- bzoj1084: [SCOI2005]最大子矩阵(dp)
- [DP] bzoj1084: [SCOI2005]最大子矩阵
- BZOJ 1084: [SCOI2005]最大子矩阵( dp )
- bzoj 1084: [SCOI2005]最大子矩阵 (DP)
- 【BZOJ1084】【杂题DP】[SCOI2005]最大子矩阵 题解
- BZOJ 1084 最大子矩阵 (dp)
- [BZOJ 1084] SCOI 2005 最大子矩阵 · 简单DP
- [BZOJ 1084][SCOI2005]最大子矩阵
- BZOJ 1084([SCOI2005]最大子矩阵-长矩阵Dp)
- bzoj1084 [SCOI2005]最大子矩阵
- BZOJ: 1084: [SCOI2005]最大子矩阵
- 【BZOJ 1084】最大子矩阵
- bzoj千题计划198:bzoj1084: [SCOI2005]最大子矩阵