数组分组(DP)
一个长度为n的数组a,我们可以把它分成任意组,每一组是一段连续的区间。
比如数组1,2,3,4,5可以分成(1,2),(3,4,5)两个组。每个分组都有一个权值,这个权值就是分组里面每个数的乘积对1000取模的结果。对于数组a的一个分组方案,总权值就是每个分组的权值和。
那么对于数组a,分组以后最大的权值和是多少?
输入格式
输入第一行一个整数n(1≤n≤1000)。
接下来一行n个整数,表示数组a,数组中每个元素都小于等于100。
输出格式
数组最大的分组权值和。
样例输入
样例输出
我们用dp[i]表示前i个数分组的最大权值,对于位置i,我们可以枚举最后一个分组的起始位置为j,计算i,j之间的权值,然后更新dp[i]即可。
为了避免过多的计算,我们需要预处理出来每个区间的乘积对1000取模的结果。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
const double PI = acos(-);
const double eps =1e-;
#define Bug cout<<"---------------------"<<endl
const int maxn=1e5+;
using namespace std; int a[];
int sum[][];//sum[i][j]表示区间i~j的乘积对1000的模
int dp[]; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)//预处理
{
sum[i][i]=a[i];
for(int j=i+;j<=n;j++)
sum[i][j]=sum[i][j-]*a[j]%;
}
dp[]=a[];
for(int i=;i<=n;i++)//求dp[i]
{
for(int j=;j<i;j++)//向前遍历j,更新dp[i]
dp[i]=max(dp[i],dp[j]+sum[j+][i]);
}
printf("%d\n",dp[n]);
return ;
}
-
数组分组(DP)的更多相关文章
- LUOGU P2344 奶牛抗议 (树状数组优化dp)
传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...
- PHP 根据key 给二维数组分组
我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组.先来看以下数组, Array ( [0] => Array ( [id] => 1 ...
- 【滚动数组】 dp poj 1036
题意:一群匪徒要进入一个酒店.酒店的门有k+1个状态,每个匪徒的参数是:进入时间,符合的状态,携带的钱. 酒店的门刚开始状态0,问最多这个酒店能得到的钱数. 思路: dp数组为DP[T][K]. 转移 ...
- 根据某个key给二维数组分组
/** * 根据某个key给二维数组分组 */ private function array_group_by($arr, $key) { $grouped = []; foreach ($arr a ...
- HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)
题目链接 2017 CCPC Harbin Problem K 题意 给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...
- Codeforces 946G Almost Increasing Array (树状数组优化DP)
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
- js对数组分组处理
一.js数组分组 1.js对数据分组类似group by 源码如下: <!DOCTYPE html> <html lang="en"> <head&g ...
- 【题解】Music Festival(树状数组优化dp)
[题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
随机推荐
- 016、MySQL取本年第一季度开始日期
#取第1季度开始日期 SELECT date_add( dy, INTERVAL ( ) MONTH ) dy FROM ( ) dy ) x ; 效果如下: 不忘初心,如果您认为这篇文章有价值,认同 ...
- ios之开源
a http://code.cocoachina.com b http://code4app.com c http://www.oschina.net/ios/codingList/ d github ...
- 打开exe并传参
shellexecute(Application.Handle,'open',PWideChar('E:\控件\TMS.Scripter.Studio.Pro..6.0.2.0.Delphi.BCB. ...
- NO8 find结合sed查找替换企业案例多方法精讲&命令总结!
·sed #替换 eg: sed 'sed 's#已有的内容#更改的内容#g' oldboy.txt s 代表替换,g代表全局,sg就是全局替换 ...
- Docker入门以及漏洞环境搭建(10.23 第二十五天)
Docker:开源的应用程序容器引擎,使用Go语言.借助于docker打包的应用程序,将这些应用程序 包含在容器里面,在容器中实现虚拟化,容器使用的是沙箱机制,相互独立,占用资源非常少. Docker ...
- tomcat中war 和 war exploded的区别
war和war exploded的区别(转载) 在使用idea开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded这里首先看一下他们两个的区别: wa ...
- js generator的两个实际应用
generator作为一个用来操作异步的状态机, 遇到yield停止, 通过调用next()来继续操作. 今天就用generator来举例两个实际开发中的应用. 1,抽奖 function draw ...
- 7.Python列表
.button, #logout { color: #333; background-color: #fff; border-color: #ccc; } span#login_widget > ...
- 记录一次ajax使用
function getSSOUrl(urlvalue) { var urls; $.ajax({ type: "GET", url: "../../GeoManage/ ...
- junit基础学习之-参数初始化(5)
package swust.edu.cn.postdoctors.service.impl; import java.util.Arrays; import java.util.Collection; ...