Codeforces Round #260 (Div. 2)C. Boredom
阿新 • • 發佈:2017-07-01
color 題意 spa 等於 pre scanf 記得 logs ++
題意: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