您的位置:首页 > 其它

复试训练——常用技巧——滚动数组

2017-02-12 00:00 204 查看
假设现在有如下的状态转移方程:

dp[i][j]=max(dp[i-1][j+1],dp[i-1][j-1]);

按照转移方程我们可以使用二维数组保存其状态值,如下代码所示:

for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=max(dp[j-1][j+1],dp[i-1][j-1]);
}
}
int ans=dp
[m];

考虑到每次状态转移仅与上一行有关,可以将二维变成一维数组保存。如下:

for(int i=1;i<=n;i++){
for(j=1;j<=m;j++){
buf[j]=max(dp[j+1],dp[j-1]);
}
for(j=1;j<=m;j++){
dp[j]=buf[j]
}
}
int ans=dp[m];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机试 复试