博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
week12-动态规划(三)C-必做题-3
阅读量:3951 次
发布时间:2019-05-24

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

C-必做题-3

东东每个学期都会去寝室接受扫楼的任务,并清点每个寝室的人数。

每个寝室里面有ai个人(1<=i<=n)。从第i到第j个宿舍一共有sum(i,j)=a[i]+…+a[j]个人
这让宿管阿姨非常开心,并且让东东扫楼m次,每一次数第i到第j个宿舍sum(i,j)
问题是要找到sum(i1, j1) + … + sum(im,jm)的最大值。且ix <= iy <=jx和ix <= jy <=jx的情况是不被允许的。也就是说m段都不能相交。
注:1 ≤ i ≤ n ≤ 1e6 , -32768 ≤ ai ≤ 32767 人数可以为负数。。。。(1<=n<=1000000)

Input

输入m,输入n。后面跟着输入n个ai
Output
输出最大和
Sample Input
1 3 1 2 3
2 6 -1 4 -2 3 -2 3
Sample Output
6
8
Hint
数据量很大,需要scanf读入和dp处理。

题目解析

刚看到这个题的时候,有点懵逼。然后又读了一遍,understand。dp问题问:   输入一个n,表示区间长度为n,现在要选取m个区间,使得这m个区间里的数加起来和最大。   m个区间中,每个区间无相交部分,比如上述输样例第二个   2 6 -1 4 -2 3 -2 3   a[1]  a[2]  a[3]  a[4]  a[5]  a[6]    -1     4    -2    3     -2     3   要选2个区间,第一次选择(2,2),sum(2,2)=4   第二次选择(4,6),sum(4,6)=4   所以最大为8.那么怎么做涅?   就是选与不选,变大与变小,具体过程见代码
注意:把ans设置为long long长整型,因为n最大1e6,a[i]最大32767所以ans最大32767*1e6,超过了整型范围,而且事实证明我把ans由int 改为long long后,结果就由wa变成ac了。为了避免麻烦,我就直接用C语言写了

Codes

#include
const int maxn=1e6+10;int m,n;long long ans;int dp[maxn],a[maxn],f[maxn];int max(int x,int y){
//标准C语言里面是木有max函数的,所以自己写 return x>y? x:y;}void ini(){
//初始化 for(int i=0;i<=n;i++){
dp[i]=0; f[i]=0; } ans=-1e10;//因为人数可为负,不妨把ans写小点}int main(){
while(scanf("%d%d",&m,&n)!=EOF){
ini(); for(int i=1;i<=n;i++)//输入 scanf("%d",&a[i]); for(int j=1;j<=m;j++){
//选区间数 for(int i=j;i<=n;i++){
//dp选出区间内最大和 dp[i]=max(dp[i-1]+a[i],f[i-1]+a[i]); if(i==j||i==j+1) f[i-1]=dp[i-1];//更新完当前区间 else f[i-1]=max(f[i-2],dp[i-1]); } } for(int i=m;i<=n;i++)//选出最大值 ans=max(ans,dp[i]); printf("%lld\n",ans); } return 0;}

转载地址:http://mdwzi.baihongyu.com/

你可能感兴趣的文章
Android创建sdcard详细图解
查看>>
Android开发:如何实现TCP和UDP传输
查看>>
Android电源管理相关应用技巧分享
查看>>
Android录音失真具体解决方案
查看>>
Android根文件系统相关应用介绍
查看>>
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>