codeforces 260 div2 C题
2014-08-09 07:59
344 查看
C题就是个dp,把原数据排序去重之后得到新序列,设dp[i]表示在前i个数中取得最大分数,那么:
if(a[i] != a[i-1]+1) dp[i] = cnt[a[i]]*a[i] + dp[i-1];
else dp[i] = dp[i] = max(dp[i-1],a[i]*cnt[a[i]] + dp[i-2]), dp[i-1]表示不取a[i], a[i]*cnt[a[i]] + dp[i-2]表示取a[i].
cnt[a[i]]是a[i]出现的次数。
if(a[i] != a[i-1]+1) dp[i] = cnt[a[i]]*a[i] + dp[i-1];
else dp[i] = dp[i] = max(dp[i-1],a[i]*cnt[a[i]] + dp[i-2]), dp[i-1]表示不取a[i], a[i]*cnt[a[i]] + dp[i-2]表示取a[i].
cnt[a[i]]是a[i]出现的次数。
#include<map> #include<cmath> #include<queue> #include<cstdio> #include<string> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long int a[100010], dp[100010], cnt[100010]; int main(){ int n,num(0); scanf("%d", &n); for(int i = 0;i < n;i ++) cin >> a[i]; sort(a, a+n); for(int i = 0;i < n;i ++) cnt[a[i]] ++; for(int i = 1;i < n;i ++) if(a[i] != a[i-1]) a[++num] = a[i]; if(num == 0){ cout << a[0]*cnt[a[0]] << endl; return 0; } dp[0] = a[0]*cnt[a[0]]; if(a[0] != a[1]-1) dp[1] = a[0]*cnt[a[0]] + a[1] * cnt[a[1]]; else dp[1] = max(cnt[a[0]] * a[0], cnt[a[1]] * a[1]); for(int i = 2;i <= num;i ++){ if(a[i] != a[i-1] + 1) dp[i] = dp[i-1] + cnt[a[i]]*a[i]; else dp[i] = max(dp[i-1], a[i]*cnt[a[i]] + dp[i-2]); } cout << dp[num] << endl; }
相关文章推荐
- codeforces 260 div2 A,B,C
- codeforces 260 div1
- 第九次codeforces竞技结束 #260 Div 2
- codeforces 260 div2 A,B,C
- codeforces 260 div2 B题
- codeforces 260 div2 virtual Participation
- codeforces 260 div2 B题
- codeforces 260 div2 B题
- codeforces 260 div2 C题
- codeforces 260 div2 C题
- Codeforces 285 div2 a
- CodeForces 506 Div.1 A. Mr. Kitayuta, the Treasure Hunter
- [DP] Codeforces 150D #107 (Div. 1) D. Mission Impassable
- codeforces 167 div 2
- codeforces 167 Div2 A
- 第八次codeforces竞技结束 #259 Div 2
- Codeforces Round #260 (Div. 2) A. Laptops
- codeforces 713C(Round #371 Div2 E) Sonya and Problem Wihtout a Legend Dp + 前缀 +离散化
- Codeforces 716B Complete the Word【模拟】 (Codeforces Round #372 (Div. 2))
- CodeForces 653 A. Bear and Three Balls——(IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2))