思路:完全背包问题,DP状态转移方程,一维的:f[j] = max(f[j],f[j-time[i]]+score[i])
/*
ID: xpli1
PROG: inflate
LANG: C
*/
#include <stdio.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define INT_MAX 0x7fffffff
#define IN stdin
#define OUT stdout
#define MAX_SIZE 10001
int score[MAX_SIZE];
int time[MAX_SIZE];
int f[MAX_SIZE];
int M,N;
int main(void)
{
FILE* fin = fopen("inflate.in","r");
FILE* fout = fopen("inflate.out","w");
fscanf(IN,"%d%d",&M,&N);
int i,j;
f[0] = 0;
for(i=0; i<N; i++){
fscanf(IN,"%d%d",&score[i],&time[i]);
for(j=time[i]; j<=M; j++){
f[j] = max(f[j],f[j-time[i]]+score[i]);
}
}
fprintf(OUT,"%d/n",f[M]);
return 0;
}