Codeforces Round #260 (Div. 2)C. Boredom
Posted 早知如此绊人心,何如当初莫相识。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #260 (Div. 2)C. Boredom相关的知识,希望对你有一定的参考价值。
题意:N个数,我们可以选择某个数A,然后去掉A,和等于A+1,A-1的所有数字,得到A价值,问最后价值最大
思路:我们可以得到去掉A,得到的价值为A*A的个数,那么dp[i]=max(dp[i]+dp[i-2],dp[i-1]).记得开long long ,
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll a[100005]; 5 ll dp[100005]; 6 map<ll ,ll >mp; 7 8 int main(){ 9 int n; 10 cin>>n; 11 for(int i=1;i<=n;i++){ 12 scanf("%I64d",&a[i]); 13 mp[a[i]]++; 14 } 15 for(int i=1;i<=100000;i++) 16 dp[i]=mp[i]*i; 17 dp[0]=0; 18 for(int i=2;i<=100000;i++){ 19 dp[i]=max(dp[i]+dp[i-2],dp[i-1]); 20 } 21 cout<<dp[100000]<<endl; 22 }
以上是关于Codeforces Round #260 (Div. 2)C. Boredom的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #260 (Div. 2) B
Codeforces Round #260 (Div. 2)C. Boredom
dp解Codeforces Round #260 (Div. 2)C. Boredom
Codeforces Round #260 (Div. 1) A. Boredom (简单dp)