POJ 3257 Cow Roller Coaster 背包^2

POJ 3257 Cow Roller Coaster 背包^2

思路:

这题数据很水,所以二维背包都能过的。

#include  < stdio.h >
#include 
< stdlib.h >

#define  MAX_N 10032
#define  MAX_B 1024
#define  MAX_L 1024

struct  node  {
    
int x, w, f, c;
}
;

struct  node  in [MAX_N];
int  dp[MAX_L][MAX_B], right[MAX_L];
int  L, N, B;

int  cmp( const   void   * a,  const   void   * b)
{
    
return ((struct node *)a)->- ((struct node *)b)->x;
}


inline 
void  update_max( int   * a,  int  b)
{
    
if (b > *a)
        
*= b;
}


int  main()
{
    
int i, c;
    
struct node *t;

    freopen(
"e:\\test\\in.txt""r", stdin);

    scanf(
"%d%d%d"&L, &N, &B);
    
for (i = 0; i < N; i++
        scanf(
"%d%d%d%d"&in[i].x, &in[i].w, &in[i].f, &in[i].c);
    qsort(
in, N, sizeof(in[0]), cmp);
    
    right[
0= 1;
    dp[
0][0= 1;
    
for (i = 0; i < N; i++{
        t 
= &in[i];
        
for (c = 0; c < right[t->x] && c + t-><= B; c++{
            
if (!dp[t->x][c])
                
continue;
            update_max(
&dp[t->+ t->w][c + t->c], dp[t->x][c] + t->f);
            update_max(
&right[t->+ t->w], c + t->+ 1);
        }

    }


    
for (i = c = 0; c <= B; c++)
        update_max(
&i, dp[L][c]);
    printf(
"%d\n", i - 1);

    
return 0;
}

你可能感兴趣的:(POJ 3257 Cow Roller Coaster 背包^2)