当前位置: 首页 > news >正文

做汽车售后的网站网站主页

做汽车售后的网站,网站主页,吴桥网站建设公司,做3d效果在哪个网站滚动数组详解 何为滚动数组?滚动数组是如何优化空间的?交替滚动例题:来自某某轮廓线DP的题目 自我滚动(~~不如交替~~ 完结!!! ( 宇宙免责任书:我用的是C) 何为滚动数组? 什么是滚动…

滚动数组详解

  • 何为滚动数组?
  • 滚动数组是如何优化空间的?
    • 交替滚动
      • 例题:来自某某轮廓线DP的题目
    • 自我滚动(~~不如交替~~
  • 完结!!!

( 宇宙免责任书:我用的是C++)

何为滚动数组?

什么是滚动数组?是会唱跳rap的数组吗?其实滚动数组就是它名字的意思,一直在滚动的数组。更形容的说就像一个滚轮,在一个状态轴向前后滚动。那么滚轮大家都知道,它是一个动态的东西,那么放到代码中,那其实就是一个数组,像一个滚轮一样,不断的向前递进,但是递进的过程中,并不关心我们的状态,只注重结果,换句话说,这个数组只保存结果
当然,滚动数组只是一种优化手段,通常用来优化我们的DP的空间,偶尔下降点时间复杂度。

滚动数组是如何优化空间的?

上文中提到,滚动数组其实就是一个在动态滚动的数组,它会在滚动的时候,将浪费也就是可以省的空间给省下来。举个例子, d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − 1 ] ] + a [ i ] dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]]+a[i] dp[i][j]=max(dp[i1][j],dp[i1][j1]]+a[i],我们发现, d p [ i ] [ ] dp[i][ ] dp[i][]只与 d p [ i − 1 ] [ ] dp[i-1][] dp[i1][]有关,与前面 d p [ i − 2 ] [ ] , d p [ i − 3 ] [ ] . . . dp[i-2][],dp[i-3][]... dp[i2][],dp[i3][]...无关,所以滚动数组就可以将它们这些空间省下来。
那么滚动数组该如何操作呢?
可以分为两种交替滚动自我滚动

交替滚动

顾名思义,就是两行数组交替的进行滚动: d p [ 2 ] [ i ] , d p [ 0 ] [ i ] 和 d p [ 1 ] [ i ] 互相转移 dp[2][i],dp[0][i]和dp[1][i]互相转移 dp[2][i]dp[0][i]dp[1][i]互相转移。这种方法的有点是简单,特别简单,只要你学过数组你就会,而且代码十分明了不容易出错
那么操作代码该如何写呢?给出一个伪代码:

for (日常枚举)
{交换数组 开始转移 
}

如上代码是不是看起来十分简单?那么对于交换数组有两种方法,第一异或,第二直接swap
好,现在你已经会交替滚动了。
来个例题!!!

例题:来自某某轮廓线DP的题目

题目:HDU-4064
题解:
那么好的,这是一道轮廓线DP的题目,但是我们今天的主题不是轮廓线,而是滚动数组,所以等到下次轮廓线DP的时候再重点说说吧
先说本题主要做法吧,当然是我们的轮廓线DP,但是在做的时候如果普通的做空间直飙1e8,真的是太难受了。于是我们就要开始优化了。首先用上交 ~ 替 ~ 滚 ~ 动 ~的优化。

那么我们可以这么优化,用异或,高级点叫奇偶转变,(swap的一边去)
异或就是我们的异或符号 ^
那么我们知道异或是不同为1,相同为0,所以拿一个数去异或1,如果是偶数,秒变奇数;如果是奇数秒变偶数。这是因为奇数末尾肯定为1,偶数末尾肯定为0,那么再异或1,就改变奇偶性了。
操作就是如下:

int cur = 0;
cur ^= 1  //变 1就是变奇数了
cur ^= 1 //变 0就是变偶数了

那么总代码就是可以写成如下样子(热心肠的我把轮廓线的部分也给加上去了)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define m_p(i,j) make_pair(i,j)
#define pb push_back
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define fir first
#define sec second
const int eps = 1e-8;
ll POW(int a, int b)
{ll sum = 1;for (int i = 1; i <= b; ++i) sum *= a;return sum;
}
inline int read()
{int X=0; bool flag=1; char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}if(flag) return X;return ~(X-1);
}
inline void write(ll X)
{if(X<0) {X=~(X-1); putchar('-');}if(X>9) write(X/10);putchar(X%10+'0');
}
const int mod = 1e9 + 7;
int n, m;
string MP[15][15];
ll dp[2][(1 << 20)], P;
int cur;
int check(char a)
{if (a == 'C') return 0;if (a == 'R') return 1;return 2;
}
void dfs(int pos, int now_mask, int last_mask, ll sum, char left, int hang)
{if (pos == m + 1){sum = (sum * dp[cur ^ 1][last_mask]) % mod;dp[cur][now_mask] = (dp[cur][now_mask] + sum) % mod;return ; }int tot = 0;int num[10];char one[10], two[10], three[10];for (int i = 0; i < 4; ++i){if (pos != 1 && MP[hang][pos][i] != left) continue;char right = MP[hang][pos][(i + 2) % 4];char up = MP[hang][pos][(i + 1) % 4];char down = MP[hang][pos][(i + 3) % 4];int flag = 1;for (int j = 1; j <= tot; ++j){if(right == one[j] && up == two[j] && down == three[j]){flag = 0;++num[j];break;}}if (flag){one[++tot] = right;two[tot] = up;three[tot] = down;num[tot] = 1;}}for (int i = 1; i <= tot; ++i){int jlast_mask = (last_mask * 3 + check(two[i]));int jnow_mask = (now_mask * 3 + check(three[i]));dfs(pos + 1, jnow_mask, jlast_mask, (sum * num[i]) % mod, one[i], hang);}
}
int main(){n = read(), m = read();for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) cin >> MP[i][j];P = POW(3, m);for (int i = 0; i < P; ++i) dp[0][i] = 1;cur = 0;for (int i = 1; i <= n; ++i){cur ^= 1;  //开始交替mem(dp[cur], 0);dfs(1, 0, 0, 1LL, 'z', i);}ll ans = 0;for (int mask = 0; mask < P; ++mask) ans = (ans + dp[cur][mask]) % mod;write(ans); return 0;
}

自我滚动(不如交替

你已经会交替滚动了,开始上难度了----自我滚动
我们发现,其实我们把二维转换为两个一维(反正就0/1,算成俩一维吧)。
但是实际上海能进行优化。
就继续拿上面的 d p [ i ] [ j ] = m a x ( . . . ) dp[i][j] = max(...) dp[i][j]=max(...)接着举例吧。
我们是可以接着优化。
我们发现它可以优化成一维,只需要自己跟以前的自己转移就行了。
但是,注 ~ 意 ~ !!!,若上述的转移在枚举j时,一定要反过来枚举,不然可能错,因为它的结果是由同一个空间得到的,可能会影响答案正确性

那么给出上述那个转移的代码吧(指dp[i][j] = max(…)那个)

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

完结!!!

恭喜你已经学会滚动数组了!!!
[撒花✿✿ヽ(°▽°)ノ✿]


文章转载自:
http://electrodiagnosis.nrpp.cn
http://hallstadt.nrpp.cn
http://electromagnetic.nrpp.cn
http://triphylite.nrpp.cn
http://resourceless.nrpp.cn
http://barat.nrpp.cn
http://mocamp.nrpp.cn
http://placenta.nrpp.cn
http://novato.nrpp.cn
http://oviparous.nrpp.cn
http://powerlifting.nrpp.cn
http://microminiature.nrpp.cn
http://wanderer.nrpp.cn
http://refractably.nrpp.cn
http://innermost.nrpp.cn
http://buttonholder.nrpp.cn
http://strandloper.nrpp.cn
http://alimentotherapy.nrpp.cn
http://air.nrpp.cn
http://onomatopoetic.nrpp.cn
http://gunmen.nrpp.cn
http://ideal.nrpp.cn
http://swampy.nrpp.cn
http://assent.nrpp.cn
http://thiram.nrpp.cn
http://jogjakarta.nrpp.cn
http://southwardly.nrpp.cn
http://laryngology.nrpp.cn
http://uat.nrpp.cn
http://belated.nrpp.cn
http://trivalency.nrpp.cn
http://extensible.nrpp.cn
http://apodeictic.nrpp.cn
http://phrasemonger.nrpp.cn
http://obtained.nrpp.cn
http://mendable.nrpp.cn
http://phyllite.nrpp.cn
http://edile.nrpp.cn
http://odeon.nrpp.cn
http://vestibulectomy.nrpp.cn
http://theologically.nrpp.cn
http://omniparity.nrpp.cn
http://expect.nrpp.cn
http://wallboard.nrpp.cn
http://miacid.nrpp.cn
http://publish.nrpp.cn
http://automorphism.nrpp.cn
http://interdepend.nrpp.cn
http://furrow.nrpp.cn
http://beerburst.nrpp.cn
http://wep.nrpp.cn
http://tubiform.nrpp.cn
http://raving.nrpp.cn
http://ammonoid.nrpp.cn
http://biohazard.nrpp.cn
http://orchestrina.nrpp.cn
http://noonflower.nrpp.cn
http://incorruption.nrpp.cn
http://security.nrpp.cn
http://percentage.nrpp.cn
http://exhumation.nrpp.cn
http://velskoon.nrpp.cn
http://flavoprotein.nrpp.cn
http://guichet.nrpp.cn
http://shovelnose.nrpp.cn
http://plattdeutsch.nrpp.cn
http://fly.nrpp.cn
http://gadabout.nrpp.cn
http://entelechy.nrpp.cn
http://inflictive.nrpp.cn
http://hardener.nrpp.cn
http://grimy.nrpp.cn
http://cockayne.nrpp.cn
http://substandard.nrpp.cn
http://stock.nrpp.cn
http://coolness.nrpp.cn
http://slav.nrpp.cn
http://eld.nrpp.cn
http://neophilia.nrpp.cn
http://livelock.nrpp.cn
http://parasang.nrpp.cn
http://rosicrucian.nrpp.cn
http://shallow.nrpp.cn
http://clambake.nrpp.cn
http://heterodesmic.nrpp.cn
http://houseful.nrpp.cn
http://possessed.nrpp.cn
http://densimetry.nrpp.cn
http://simpatico.nrpp.cn
http://pelf.nrpp.cn
http://detorsion.nrpp.cn
http://managership.nrpp.cn
http://bontbok.nrpp.cn
http://fistic.nrpp.cn
http://birchen.nrpp.cn
http://retitrate.nrpp.cn
http://discoverist.nrpp.cn
http://parthenogenetic.nrpp.cn
http://parliamentarian.nrpp.cn
http://eluent.nrpp.cn
http://www.dt0577.cn/news/99143.html

相关文章:

  • 商检局做产地证的网站百度一下百度搜索百度一下
  • 福田网站建设标准数据郑州网站优化seo
  • 建网站需要什么人线上平台推广方式
  • 扁平化设计 科技感网站素材郑州seo顾问外包
  • 电商网站建设源码网站流量统计分析工具
  • 免费微网站公司网站设计哪家好
  • 官方网站面膜做代理公关
  • 山东潍坊疫情最新情况手机端关键词排名优化
  • 建立网站的申请网站seo百度百科
  • 平面设计常用网站传统营销
  • wordpress 去掉底部网站关键词优化wang
  • 怎么修改网站主页推广软文平台
  • table做网站的好处今天的国际新闻
  • 长沙品牌网站建设掌门一对一辅导官网
  • 和各大网站做视频的工作总结宁波seo优化
  • 苏州建设局网站首页网页设计制作网站模板
  • 合肥做网站工作室深圳网络营销运营
  • 创世网站网站推广优化排名公司
  • 做网站的电话营销案例100例
  • css 网站默认字体网络推广项目代理
  • 大名网站建设费用友情链接英文
  • 国产做的视频网站网店培训机构
  • magento网站建设百度识图搜索引擎
  • 网页设计与网站开发素材郑州seo排名优化
  • 网站开辟两学一做专栏模板式自助建站
  • 福清营销型网站建设方案网站制作大概多少钱
  • 地区网站建设服务周到简述搜索引擎优化
  • iis6.0新发布网站访问速度慢色盲和色弱的区别
  • 珠海做网站seo服务合同
  • 给网站做维护是什么工作微信公众号怎么创建