BZOJ 1084 最大子矩阵
2024-08-23 12:42:08
http://www.lydsy.com/JudgeOnline/problem.php?id=1084
思路:分m=1和m=2操作
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int f[][],F[][][];
int sum[],sum1[],sum2[],n,m,K;
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void sxpianfen1(){
for (int i=;i<=n;i++)
{int x=read();sum[i]=sum[i-]+x;}
for (int i=;i<=n;i++)
for (int k=;k<=K;k++){
f[i][k]=f[i-][k];
for (int j=;j<i;j++)
f[i][k]=std::max(f[i][k],f[j][k-]+sum[i]-sum[j]);
}
printf("%d\n",f[n][K]);
}
void sxpianfen2(){
for (int i=;i<=n;i++){
int x=read(),y=read();
sum1[i]=sum1[i-]+x;
sum2[i]=sum2[i-]+y;
}
for (int k=;k<=K;k++)
for (int i=;i<=n;i++)
for (int j=;j<=n;j++){
F[i][j][k]=std::max(F[i-][j][k],F[i][j-][k]);
for (int l=;l<i;l++) F[i][j][k]=std::max(F[i][j][k],F[l][j][k-]+sum1[i]-sum1[l]);
for (int l=;l<j;l++) F[i][j][k]=std::max(F[i][j][k],F[i][l][k-]+sum2[j]-sum2[l]);
if (i==j)
for (int l=;l<i;l++) F[i][j][k]=std::max(F[i][j][k],F[l][l][k-]+sum1[i]+sum2[j]-sum1[l]-sum2[l]);
}
printf("%d\n",F[n][n][K]);
}
int main(){
n=read();m=read();K=read();
if (m==){
sxpianfen1();
}else
sxpianfen2();
}
最新文章
- MyEclipse10--的使用经验
- svg格式嵌入html中方法之一
- 设置Android studio内容的主题
- nginx根据IP限制访问
- nodejs简易实现一下bigpipe
- 一塔湖图(codevs 1024)
- android 直接启动其他应用的Service
- [Windows] VS2010代码模板添加版权信息
- 【Sharing】开发与研发
- string.Join和string.Concat的区别
- hdoj 2178 猜数字
- oracle 查询
- windows下python双系统安装
- VNC Viewer 设置屏幕分辨率
- Rsync 客户端配置
- 纯css3实现文字间歇滚动效果
- JAVA Eclipse 快捷键 ctrl+f 查找/替换 字符串
- 初学node.js-nodejs安装运行(1)
- Android wifi无线调试App新玩法ADB WIFI
- LR字符串处理
热门文章
- 在Visual Studio中使用GitHub(使用篇)
- Linux下用Mytop监控MySQL资源
- 这样就算会了PHP么?-11
- HEX转BIN源码分析(51系列)
- python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客
- c++之 常用类型
- Uninstall or Disable Java on a Mac
- .NET(C#):分析IL中的if-else,while和for语句并用Emit实现
- [Protractor] Use protractor to catch errors in the console
- Oracle-nomount/mount/open