题目地址:http://codeforces.com/contest/456/problem/C
脑残了。
。DP仅仅DP到了n。
。
应该DP到10w+的。
。
代码例如以下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; __int64 a[110000], dp[110000]; int main() { __int64 n, x, i, j, max1=-1; scanf("%I64d",&n); memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%I64d",&x); a[x]++; } dp[0]=0; dp[1]=a[1]; dp[2]=a[2]*2; max1=max(dp[1],dp[2]); for(i=3;i<=100003;i++) { dp[i]=max(dp[i-2],dp[i-3])+a[i]*i; if(max1<dp[i]) max1=dp[i]; } printf("%I64d\n",max1); return 0; }