题目链接:http://noi.openjudge.cn/ch0206/6045/
解题报告:参考了konjac 蒟蒻的。
题意: 有N个地址,从中选一些开餐馆,要保证相邻餐馆的距离大于k。问最大利润。
解法: f[i] 表示 前 i 个地址中选取的最大利润。
#include <bits/stdc++.h>
using namespace std; const int Maxn = ,INF = 0x3f3f3f3f; int m[Maxn],p[Maxn];
int f[Maxn]; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,w;
scanf("%d%d",&n,&w); for(int i=; i<=n; i++) scanf("%d",&m[i]);
m[] = -INF; for(int i=; i<=n; i++) scanf("%d",&p[i]); f[] = ; for(int i=; i<=n; i++)
{
f[i] = max(f[i-],p[i]); for(int j=; j<i; j++)
{
if(m[i]-m[j]>w)
f[i] = max(f[i],f[j]+p[i]);
else break;
} } printf("%d\n",f[n]); } return ;
}