6.动态规划
动态规划
\(A\) CF510D Fox And Jumping
\(B\) CF459E Pashmak and Graph
\(C\) CF809C Find a car
\(D\) luogu P4099 [HEOI2013] SAO
\(E\) CF559E Gerald and Path
\(F\) luogu P4516 [JSOI2018] 潜入行动
\(G\) HDU6566 The Hanged Man
\(H\) UOJ 211. 【UER #6】逃跑
\(I\) CF613E Puzzle Lover
\(J\) [ABC201F] Insertion Sort
动态规划2
开题顺序: \(GFACBE\)
\(A\) BZOJ3329 Xorequ
\(B\) luogu P1912 [NOI2009] 诗人小G
\(C\) luogu P2254 [NOI2005] 瑰丽华尔兹
\(D\) CF809C Find a car
\(E\) CF161D Distance in Tree
\(F\) CF486D Valid Sets
-
观察到 \(n,d \le 2000\) ,考虑钦定每个最大点是哪个点。
-
但这样又会出现一个问题,当最大点不唯一时就会重复统计,那就同时钦定点的编号最大即可。
点击查看代码
struct node { ll nxt,to; }e[4001]; ll head[4001],a[4001],f[4001],cnt=0; void add(ll u,ll v) { cnt++; e[cnt].nxt=head[u]; e[cnt].to=v; head[u]=cnt; } void dfs(ll x,ll fa,ll rt,ll d) { f[x]=1; for(ll i=head[x];i!=0;i=e[i].nxt) { if(e[i].to!=fa) { if(a[rt]-a[e[i].to]<=d&&(a[rt]>a[e[i].to]||(a[rt]==a[e[i].to]&&e[i].to<rt))) { dfs(e[i].to,x,rt,d); f[x]=(f[x]+f[x]*f[e[i].to]%1000000007)%1000000007; } } } } int main() { ll d,n,i,u,v,ans=0; cin>>d>>n; for(i=1;i<=n;i++) { cin>>a[i]; } for(i=1;i<=n-1;i++) { cin>>u>>v; add(u,v); add(v,u); } for(i=1;i<=n;i++) { dfs(i,0,i,d); ans=(ans+f[i])%1000000007; } cout<<ans<<endl; return 0; }
\(G\) SP7739 BOI7SOU - Sound
-
固定长度的 \(RMQ\) 板子。
点击查看代码
int a[5000000]; struct SegmentTree { int l,r,maxx=0,minn=0x7f7f7f7f; }tree[5000000]; int lson(int x) { return 2*x; } int rson(int x) { return 2*x+1; } void pushup(int rt) { tree[rt].maxx=max(tree[lson(rt)].maxx,tree[rson(rt)].maxx); tree[rt].minn=min(tree[lson(rt)].minn,tree[rson(rt)].minn); } void build(int rt,int l,int r) { tree[rt].l=l; tree[rt].r=r; if(l==r) { tree[rt].maxx=tree[rt].minn=a[l]; return; } int mid=(l+r)/2; build(lson(rt),l,mid); build(rson(rt),mid+1,r); pushup(rt); } int querymax(int rt,int l,int r) { if(l<=tree[rt].l&&tree[rt].r<=r) { return tree[rt].maxx; } int mid=(tree[rt].l+tree[rt].r)/2,maxx=0; if(l<=mid) { maxx=max(maxx,querymax(lson(rt),l,r)); } if(r>mid) { maxx=max(maxx,querymax(rson(rt),l,r)); } return maxx; } int querymin(int rt,int l,int r) { if(l<=tree[rt].l&&tree[rt].r<=r) { return tree[rt].minn; } int mid=(tree[rt].l+tree[rt].r)/2,minn=0x7f7f7f7f; if(l<=mid) { minn=min(minn,querymin(lson(rt),l,r)); } if(r>mid) { minn=min(minn,querymin(rson(rt),l,r)); } return minn; } int main() { int n,m,c,i,flag=0; cin>>n>>m>>c; for(i=1;i<=n;i++) { cin>>a[i]; } build(1,1,n); for(i=1;i+m-1<=n;i++) { if(querymax(1,i,i+m-1)-querymin(1,i,i+m-1)<=c) { flag=1; cout<<i<<endl; } } if(flag==0) { cout<<"NONE"<<endl; } return 0; }
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18470545,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。

战火的化身,毁灭的使者已然带着烈焰降临世间!一息之间,万物尽数化为焦土。
浙公网安备 33010602011771号