1084: [SCOI2005]最大子矩阵
来源:互联网 发布:windows.h有哪些函数 编辑:程序博客网 时间:2024/05/16 03:23
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2333 Solved: 1148
[Submit][Status][Discuss]
Description
这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵
不能相互重叠。
Input
第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的
分值的绝对值不超过32767)。
Output
只有一行为k个子矩阵分值之和最大为多少。
Sample Input
3 2 2
1 -3
2 3
-2 3
Sample Output
9
解答:分情况
m=1时,f1[k][i]表示1~i内含有k个子矩阵的状态
m=2时,f[k][i][j]表示第一列1~i,第二列1~j含有k个子矩阵的状态
两种情况的状态转移见代码理解。
#include<cstdio>#include<cstring>using namespace std;int a[110][3],n,m,K,f1[11][110],f[11][110][110],s[110],s1[110],s2[110];int mymax(int x,int y){ return x>y?x:y;}int main(){ freopen("matrix.in","r",stdin); freopen("matrix.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",&a[i][j]); if(m==1) { s[0]=0; for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i][1]; memset(f1,0,sizeof(f1)); for(int k=1;k<=K;k++) { f1[k][k]=s[k]; for(int i=k+1;i<=n;i++) { f1[k][i]=f1[k][i-1]; for(int j=k;j<=i;j++) f1[k][i]=mymax(f1[k][i],f1[k-1][j-1]+s[i]-s[j-1]); } } printf("%d\n",f1[K][n]); } else //if m==2 { s1[0]=s2[0]=0; for(int i=1;i<=n;i++) s1[i]=s1[i-1]+a[i][1],s2[i]=s2[i-1]+a[i][2]; memset(f,0,sizeof(f)); for(int k=1;k<=K;k++) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { f[k][i][j]=mymax(f[k][i-1][j],f[k][i][j-1]); for(int l=1;l<=i;l++)f[k][i][j]=mymax(f[k][i][j],f[k-1][l-1][j]+s1[i]-s1[l-1]); for(int l=1;l<=j;l++)f[k][i][j]=mymax(f[k][i][j],f[k-1][i][l-1]+s2[j]-s2[l-1]); if(i==j)for(int l=1;l<=j;l++)f[k][i][j]=mymax(f[k][i][j],f[k-1][l-1][l-1]+s1[i]-s1[l-1]+s2[j]-s2[l-1]); } } printf("%d\n",f[K][n][n]); } return 0;}
1 0
- 1084: [SCOI2005]最大子矩阵
- 1084: [SCOI2005]最大子矩阵
- 1084: [SCOI2005]最大子矩阵
- 1084: [SCOI2005]最大子矩阵
- [SCOI2005] 最大子矩阵
- [SCOI2005]最大子矩阵
- [SCOI2005]最大子矩阵
- [SCOI2005]最大子矩阵
- [SCOI2005]最大子矩阵
- [SCOI2005]最大子矩阵
- bzoj 1084: [SCOI2005]最大子矩阵 题解
- [BZOJ 1084][SCOI2005]最大子矩阵
- 1084: [SCOI2005]最大子矩阵 (动态规划)
- [BZOJ 1084][SCOI2005]最大子矩阵
- BZOJ 1084: [SCOI2005]最大子矩阵
- 【BZOJ 1084】 [SCOI2005]最大子矩阵
- bzoj 1084: [SCOI2005]最大子矩阵 dp
- BZOJ 1084 [SCOI2005]最大子矩阵
- Xcode 常用快捷键
- SpringMVC 重定向参数 RedirectAttributes
- Java动态代理(JDK)
- 方差分析与R实现
- WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)
- 1084: [SCOI2005]最大子矩阵
- input标签输入框点击时出现默认边框
- 正则表达式提取HTML文本中的图片图片
- SpringMVC——redirect重定向跳转传值
- 实现会员注册升级
- httpServletRequest获取浏览器的cookie
- Mac OS X 配置 Beyond Compare
- Android如何永久性开启adb的root权限
- 第一篇博客-吐槽工作