您的位置:首页 > 其它

hdu 1024(滚动数组的学习)

2013-03-13 10:03 351 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024

学习了一下滚动数组,dp中经常卡内存,而利用滚动数组可以大大节省内存空间,不错哦。

View Code

#include<iostream>
#include<cstring>
#include<algorithm>
const int N=1000010;
const int inf=1000000000;
using namespace std;

int a
;
int dp
,pre
;//dp[i][j]表示第j个数前组成i组的最大值;
//为了节省内存,可以用pre[j]来保存前一次求得的dp[j-1]的最大值,这样相当于数组在不断进行滚动
//最后输出temp即可;

int main(){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
memset(dp,0,sizeof(dp));
memset(pre,0,sizeof(pre));
int temp;
for(int i=1;i<=m;i++){
temp=-inf;
for(int j=i;j<=n;j++){
dp[j]=max(dp[j-1]+a[j],pre[j-1]+a[j]);
pre[j-1]=temp;
temp=max(temp,dp[j]);
}
}
printf("%d\n",temp);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: