分析:本体类似于经典的完全背包问题,每个阶段解决向上或者向下,而且次数不限,类似于物品个数没有限制。所以f[i][j]的状态可以从f[i-1][*]和f[i][*]中转移过来。
保证时间复杂度是O(nm)即可
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define maxn 10010
using namespace std;
const int inf = 0x7ffffff;
int n,m,k,p,l,h;
int x[maxn],y[maxn],down[maxn], up[maxn];
int f[maxn][1001];
int main() {
freopen("bird.in","r",stdin);
freopen("bird.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for (int i = 0; i < n; ++i)
scanf("%d %d", &x[i]