博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HUST 1351 Group
阅读量:6189 次
发布时间:2019-06-21

本文共 1523 字,大约阅读时间需要 5 分钟。

(莫名其妙的被一个叫布布扣的网站收录了......什么鬼)

简单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
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 20000 + 10;const int INF = 0x7fffffff;int dp[maxn][100 + 10];int f[maxn][100 + 10];int a[maxn];int sum[maxn];int n, l, k;int ans;void read(){ scanf("%d%d%d", &n, &k, &l); for (int i = 1; i <= n; i++) scanf("%d", &a[i]);}void init(){ memset(sum, 0, sizeof sum); for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i]; ans = INF; for (int i = 0; i <= n; i++) for (int j = 0; j <= k; j++) dp[i][j] = INF, f[i][j] = INF;}void work(){ for (int i = l; i <= n; i++) { dp[i][1] = sum[i]; f[i][1] = min(f[i - 1][1], dp[i][1] - (1 + 1)*sum[i]); } for (int i = 1; i <= n; i++) { for (int j = 2; j <= k; j++) { if (i - l <= 0) continue; if (f[i - l][j - 1] == INF) continue; dp[i][j] = j*sum[i] + f[i - l][j - 1]; f[i][j] = min(f[i - 1][j], dp[i][j] - (j + 1)*sum[i]); } } for (int j = 1; 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 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5194654.html

你可能感兴趣的文章
【开源一个小工具】一键将网页内容推送到Kindle
查看>>
常用图像处理相关图像数据库
查看>>
spark实战@wordcount-处理目录下的多个文件
查看>>
VMware Vsphere 虚拟化
查看>>
mysql之 CentOS系统针对mysql参数优化
查看>>
sencha touch 2中list控件分组排序
查看>>
myod
查看>>
iOS 多线程的使用
查看>>
dex、apk完整性校验
查看>>
CF633C:Spy Syndrome 2——题解
查看>>
POJ3070:Fibonacci——题解
查看>>
白盒测试实践作业进度报告——Day 3
查看>>
私有继承:派生类指针不能隐示的转换为基类指针
查看>>
Micropython 如何用Turnipbit做一个自动浇水装置
查看>>
Python 成仙之路
查看>>
HashTable Dictionary HashMap
查看>>
【翻译】如何创建Ext JS暗黑主题之一
查看>>
【OpenGL】详解第一个OpenGL程序
查看>>
设置ubuntu Android sdk JDK环境变量
查看>>
android应用程序的混淆打包
查看>>