题目:开餐馆
思路:
dp。
f[i]表示使用前i个地点获得的最大收益。
f[i]=max(f[i],f[j]+w[i])
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxk 1000
#define maxn 100
#define inf (1<<30)
int n,k;
int m[maxn+5],w[maxn+5];
int f[maxn+5]= {0};
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++) scanf("%d",&m[i]);
for(int i=1; i<=n; i++) scanf("%d",&w[i]);
m[0]=-inf;
memset(f,0,sizeof(f));
for(int i=1; i<=n; i++) {
f[i]=f[i-1];
for(int j=0; m[j]+k<m[i]; j++) {
f[i]=max(f[i],f[j]+w[i]);
}
}
printf("%d\n",f[n]);
}
return 0;
}