j==p[i]||(j>p[i]&&d[j-p[i]])
this will generate a scattered dp table, not like the original continuous one.
/* UVas */ /*****************************************************************************/ #define N 100 #define M 10201 int m, n; int p[N]; int f[N]; int d[M]; int main(void) { while ( scanf("%d %d", &m, &n)>0) { for (int i=0; i<n; i++) scanf("%d %d", &p[i], &f[i]); memset(d, 0, sizeof(d)); for (int i=0; i<n; i++) for (int j=M-1; j>=p[i]; j--) if (j==p[i]||(j>p[i]&&d[j-p[i]])) d[j]=max(d[j], d[j-p[i]]+f[i]); int r=0; for (int i=0; i<M; i++) if ((i>2000&&i<=m+200)||i<=m) r=max(r, d[i]); printf("%d\n", r); } } /*****************************************************************************/
No comments :
Post a Comment