WUST OJ 1508:最优序列(DP)

来源:互联网 发布:kuka仿真软件 编辑:程序博客网 时间:2024/05/21 14:41



1508: 最优序列

Time Limit: 1 Sec  Memory Limit: 65535 MB  64bit IO Format: %lld
Submitted: 70  Accepted: 15
[Submit][Status][Web Board]

Description

给定一个长度为N的正整数序列,求一个子序列,使得原序列中任意长度为M的子串中被选出的元素不超过1个。要求选出的元素之和最大。

Input

有多组测试数据
每组测试数据的第一行是两个整数n和m(1≤N≤1000,1≤M≤100),第二行给出了n个正整数。

Output

每组测试数据额输出占一行,包含一个整数,表示选出的最优序列中所有整数的和。

Sample Input 

10 4

1 3 1 1 1 1 1 1 3 1

10 4

7 3 4 8 2 6 5 7 4 8

Sample Output

6
21

Source

2015年武汉科技大学“蓝桥杯”校内选拔赛

思路:dp,用f[i][0]表示前i个数中的能取到的最大值,0表示不选第i个数,1表示选。

#include<cstdio>#include<algorithm>using namespace std;int main(){    int n,m,a[1000];    while(scanf("%d%d",&n,&m)!=EOF)    {        int f[1001][101];        for(int i=0;i<n;i++)scanf("%d",&a[i]);        for(int i=0;i<n;i++)        {            if(i>=m)            {                f[i][0]=max(f[i-1][0],f[i-1][1]);                f[i][1]=max(f[i-m][0],f[i-m][1])+a[i];            }            else if(i==0)f[i][0]=0,f[i][1]=a[i];            else            {                f[i][0]=max(f[i-1][0],f[i-1][1]);                f[i][1]=a[i];            }        }        printf("%d\n",max(f[n-1][0],f[n-1][1]));    }    return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝店铺层级排名下降怎么办 网购不支持该地区销售怎么办 分销公司佣金不给业务员怎么办 淘宝买家账号违规了怎么办 王者荣耀打野被队友抢野怎么办 艾肯材料换错了怎么办 淘宝直播粉丝5万怎么办 淘宝直播刚开始好难怎么办 分期乐账号忘记了怎么办 外链多了影响网站排名怎么办 自粘墙纸有气泡怎么办 贴壁纸阴角不力怎么办 自贴墙纸有气泡怎么办 壁纸贴的有起泡怎么办 pos机连接主机失败怎么办 无线pos机连接主机失败怎么办 水墨晕染模板用不了怎么办 申请入驻饿了么失败怎么办 天猫流量大淘宝怎么办 拼多多商家不退款怎么办 苹果手机开流量显示e怎么办 苹果手机有服务流量打不开怎么办 苹果七plus流量打不开怎么办 苹果手机突然打不开流量怎么办 天猫商家迟迟不发货怎么办 苹果7开不开机了怎么办 苹果机黑屏了开不起来怎么办 美团收银机连不上网怎么办 6s换电池后黑屏怎么办 苹果上的软件打不开也删不掉怎么办 苹果手机打开软件打不开怎么办 苹果电脑下载的软件打不开怎么办 苹果手机下载的软件都打不开怎么办 苹7果屏幕黑屏怎么办 苹果6s手机打不开怎么办 苹果ipad密码输入打不开怎么办 苹果平板黑屏了打不开怎么办 苹果6sp电影商城打不开怎么办 苹果6应用商城打不开怎么办 游戏下载好了安装不上怎么办 苹果5s应用商店不见了怎么办