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