HUST 1351 Group
(莫名其妙的被一个叫布布扣的网站收录了......什么鬼)
简单DP。dp[i][j]表示把前i个数字分成j段的最优解,
递推式很容易写:
(其中sum[]是前缀和;p <= i - L,并且前p个数能分成j-1段,下文不再说明p的范围,都是一样的)
得到递推式之后暴力DP的话复杂度为o(n*n*k),显然超时。
递推式可以变形成这样:
现在,想求得dp[i][j],只需求得
,即前面所有P的位置的最小值。
然而,上面这式子可以递推得到:
令f[i][j]=
,
最终,得到了两个式子:

代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<functional>
using namespace std; const int maxn = + ;
const int INF = 0x7fffffff;
int dp[maxn][ + ];
int f[maxn][ + ];
int a[maxn];
int sum[maxn];
int n, l, k;
int ans; void read()
{
scanf("%d%d%d", &n, &k, &l);
for (int i = ; i <= n; i++) scanf("%d", &a[i]);
} void init()
{
memset(sum, , sizeof sum);
for (int i = ; i <= n; i++) sum[i] = sum[i - ] + a[i];
ans = INF;
for (int i = ; i <= n; i++)
for (int j = ; j <= k; j++)
dp[i][j] = INF, f[i][j] = INF;
} void work()
{
for (int i = l; i <= n; i++)
{
dp[i][] = sum[i];
f[i][] = min(f[i - ][], dp[i][] - ( + )*sum[i]);
} for (int i = ; i <= n; i++)
{
for (int j = ; j <= k; j++)
{
if (i - l <= ) continue;
if (f[i - l][j - ] == INF) continue;
dp[i][j] = j*sum[i] + f[i - l][j - ];
f[i][j] = min(f[i - ][j], dp[i][j] - (j + )*sum[i]);
}
} for (int j = ; j <= k; j++) ans = min(ans, dp[n][j]);
//for (int j = 1; j <= k; j++) printf("**** %d\n", dp[n][j]);
printf("%d\n", ans);
} int main()
{
int T;
scanf("%d", &T);
while (T--)
{
read();
init();
work();
}
return ;
}
HUST 1351 Group的更多相关文章
- Group Normalization
Group Normalization 2018年03月26日 18:40:43 阅读数:1351 FAIR 团队,吴育昕和恺明大大的新作Group Normalization. 主要的优势在于,BN ...
- LINQ Group By操作
在上篇文章 .NET应用程序与数据库交互的若干问题 这篇文章中,讨论了一个计算热门商圈的问题,现在在这里扩展一下,假设我们需要从两张表中统计出热门商圈,这两张表内容如下: 上表是所有政区,商圈中的餐饮 ...
- Kafka消费组(consumer group)
一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...
- LINQ to SQL语句(6)之Group By/Having
适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group ...
- 学习笔记 MYSQL报错注入(count()、rand()、group by)
首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...
- [备查]使用 SPQuery 查询 "Person or Group" 字段
原文地址:http://www.stum.de/2008/02/06/querying-the-person-or-group-field-using-spquery/ Querying the “P ...
- order by 与 group by 区别
order by 排序查询.asc升序.desc降序 示例: select * from 学生表 order by 年龄 ---查询学生表信息.按年龄的升序(默认.可缺省.从低到高)排列显示 也可以多 ...
- Group by
分组语句必须和聚合函数在一起使用, group by子句负责将数据分成逻辑组,聚合函数对每一组进行统计计算 group by 必须放到 select 语句后面,如果select语句中有where子句, ...
- Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页
GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group ...
随机推荐
- 从头到尾彻底解析Hash表算法
作者:July.wuliming.pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部分为打造一个最快的Hash ...
- Spotlights
Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- Struts2值栈详解
1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...
- dos命令创建安卓签名
1.dos下进入到jdk安装目录的bin目录, 如:C:\Program Files\Java\jdk1.7.0_79\bin 2.输入命令格式如: keytool -genkey -alias aa ...
- AndroidStudio使用注意事项
今天在引入GitHUb上的开源框架时,写好依赖后编译时,报以下错误: Error:Execution failed for task ':app:processDebugResources'.> ...
- PHP中将ip地址转成十进制数的两种实用方法
As we all know that long2ip works as ip1.ip2.ip3.ip4 (123.131.231.212) long ip => (ip1 * 256 * 25 ...
- 最新最全的html5标签集合
最新最全的html5标签集合,按字母顺序排列的标签列表 4:指示在HTML4.01中定义了该元素 5:指示在HTML5中定义了该元素 标签 描述 <!--...--> 定义注释 <! ...
- Android消息提示框Toast
Android消息提示框Toast Toast是Android中一种简易的消息提示框.和Dialog不一样的是,Toast是没有焦点的,toast提示框不能被用户点击,而且Toast显示的时间有限,t ...
- UCI机器学习数据库
UC Irvine Machine Learning Repository:UCI指的是加州大学欧文分校.UCI机器学习库主要是收集的机器学习领域的一些相关数据集和数据生成器,可以用来做一些基本的实验 ...
- 解决Only the original thread that created a view hierarchy can touch its views
这种异常出现在子线程中处理UI操作产生的异常,将UI操作放在主线程中就OK了