题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1084

水题...分类讨论一下即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,k,dp[][][],s1[],s2[],f[][][],w[];
int main()
{
scanf("%d%d%d",&n,&m,&k);
if(m==)
{
for(int i=;i<=n;i++)scanf("%d",&w[i]);
for(int i=;i<=n;i++)
for(int j=;j<=k;j++)
{
dp[i][j][]=max(dp[i-][j][],dp[i-][j][]);
if(j)dp[i][j][]=max(dp[i-][j][],dp[i-][j-][])+w[i];
}
printf("%d",max(dp[n][k][],dp[n][k][]));
return ;
}
else
{
for(int i=,a,b;i<=n;i++)
{
scanf("%d%d",&a,&b);
s1[i]=s1[i-]+a;
s2[i]=s2[i-]+b;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int l=;l<=k;l++)
{
f[i][j][l]=max(f[i][j-][l],f[i-][j][l]);
for(int t=;t<i;t++)//t从0开始!
f[i][j][l]=max(f[i][j][l],f[t][j][l-]+s1[i]-s1[t]);
for(int t=;t<j;t++)
f[i][j][l]=max(f[i][j][l],f[i][t][l-]+s2[j]-s2[t]);
if(i==j)
for(int t=;t<i;t++)
f[i][j][l]=max(f[i][j][l],f[t][t][l-]+s1[i]-s1[t]+s2[j]-s2[t]);
}
printf("%d",f[n][n][k]);
return ;
}
}

最新文章

  1. 有关sql server 2008无法导入数据库mdf文件的处理方法
  2. java Collection.shuffle()随机打乱一个顺序数组
  3. Fetch from Upstream 变灰失效
  4. css中的字体及文本相关属性
  5. 1.mybatis简介
  6. Program A-归并排序
  7. CodeForces 527B
  8. #Leet Code# Sqrt
  9. ExtJs 学习笔记
  10. 使用cm-12.0源代码编译twrp
  11. HTML DOM 改变 HTML 内容
  12. Azkaban实战,Command类型单一job示例,任务中执行外部shell脚本,Command类型多job工作flow,HDFS操作任务,MapReduce任务,HIVE任务
  13. vue-cli3.0之vue.config.js的配置项(注解)
  14. 关于golang.org/x包问题
  15. 【windows】之查看端口占用
  16. tabel 选中行变色和取当前选中行值等问题
  17. 并发编程之 ThreadLocal 源码剖析
  18. C# CSGL
  19. LintCode: Triangle
  20. Week4:Neural Networks难点记录

热门文章

  1. 洛谷——P2690 接苹果
  2. 无法启动INTERNET连接共享。一个已经用IP地址配置的LAN连接需要自动IP地址
  3. mysql主从读写分离,分库分表
  4. c++中c_str()函数
  5. 更改Tomcat命令行窗体标题
  6. BUPT复试专题—最近公共祖先(2014软院)
  7. Codeforces 424 C. Magic Formulas
  8. react 创建组件 (四)Stateless Functional Component
  9. 【转载】C# 理解泛型
  10. Network Booting