想要弄一个网站怎么弄,wordpress文章顺序,windows搭建wordpress博客,wordpress主题取消题目描述 解析
头疼 定义dp[i]:只用前i块板的最大价值 对于新加入的一个木匠#xff1a; 不难写出dp转移式#xff1a;
dp[i]max(dp[k](i-k)*p)k表示开始刷的前一个 其中is i-kl; 要是这么转移会是n^2m 所以我就不废了。。。 其实离正解很接近了 把上面移一下项 不难写出dp转移式
dp[i]max(dp[k](i-k)*p)k表示开始刷的前一个 其中is i-kl; 要是这么转移会是n^2m 所以我就不废了。。。 其实离正解很接近了 把上面移一下项
dp[i]max(dp[k]-k*p)p*i所以我们就是每次询问i前面一定长度的dp[k]-k*p 的最大值 就可以维护一个单调队列来解决了 复杂度nm
注意 这里与简单的滑动窗口并非完全相同 因为上面的式子我一开始忽略了一个取值范围 k要小于s 因为显然ks时本次就没有刷s不合法
代码
#include bits/stdc.h
using namespace std;
#define ll long long
const int N30500;
int m,n;
ll dp[N];
struct node{int l,v,s;bool operator (const node y)const{return sy.s;}
}p[N];
int main(){scanf(%d%d,n,m);for(int k1;km;k){
// printf(\ndp:);
// for(int i1;in;i) printf(%d ,dp[i]);scanf(%d%d%d,p[k].l,p[k].v,p[k].s);}sort(p1,p1m);for(int k1;km;k){
// printf(\ndp:);
// for(int i1;in;i) printf(%d ,dp[i]);int sp[k].s,vp[k].v,lp[k].l;int mnmax(0,s-l);int mxmin(n,sl-1);ll x[N],q[N],t[N],st1,ed0;for(int imn;imx;i) x[i]dp[i]-i*v;for(int imn;is;i){while(stedq[ed]x[i]) ed--;q[ed]x[i];t[ed]i;
// printf(i%d: ,i);
// for(int jst;jed;j) printf(%d ,q[j]);
// printf( (not)\n);}for(int is;imx;i){while(stedt[st]i-l) st;if(sted) break;dp[i]max(dp[i],q[st]v*i);
// printf(i%d: ,i);
// for(int jst;jed;j) printf(%d ,q[j]);
// printf(\n);
// printf(dp%lld\n,dp[i]);}for(int i2;in;i) dp[i]max(dp[i],dp[i-1]);}printf(%lld,dp[n]);return 0;
}