一家饭店,有一扇大小会变得门,变化范围为[0,k]。每过一单位时间你可以让门的大小+1,-1,或者不变。
客人会在不同的时间来吃饭,但是如果门的大小和他们希望的值不一样,他们就不会进来并且直接消失。
吃饭要花钱,现在问饭店最多能赚多少钱。
F[i ] [j ] =max( F[i-1][j] +v,F[i-1][j-1] +v,F[i-1][j+1] +v)
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int N =3e4+10; int f[N][120],tm[120],h[120],a[120],n,m,T,b[N][120] ; void sov(){ int i,j; cin>>n>>m>>T; memset(f,0,sizeof f); memset(b,0,sizeof b) ; for(int i=1;i<=n;i++) cin>>tm[i]; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>h[i],b[tm[i]][h[i]]+=a[i] ; for(i =1; i <=T; i ++) for(j = 0; j <= min(i,m); j ++) { int v = b[i][j] ; f[i][j]=max(max(f[i-1][j-1],f[i-1][j]),f[i-1][j+1])+v; } int ans=0; for(int j=0;j<=m;j++) ans=max(ans,f[T][j]) ; cout << ans<<endl; } int main() { int tes;cin>>tes; while(tes--){ memset(f,0,sizeof f) ; sov() ; if(tes) cout<<endl; } }
标签:int,memset,672,120,Gangsters,tm,UVA,sizeof,tes From: https://www.cnblogs.com/towboa/p/17362971.html