455A - Boredom

来源:互联网 发布:极品飞车ola车数据 编辑:程序博客网 时间:2024/05/15 07:04

题意:给定n<1e5个数,从n个数里选数,每选一个k,得到k分,删除所有k+1和k-1,使得分最高。

dp[i][0]表示第i个数不选,dp[i][1]表示选。最优情况一定是把所有数都用完。

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int a[100010];int cnt[100010];long long  d[100010][5];int main(){int i,j,k,n,m;while(scanf("%d",&n)!=EOF){memset(cnt,0,sizeof(cnt));int ma=-1;for(i=0;i<n;i++){scanf("%d",&a[i]);ma=max(ma,a[i]);cnt[a[i]]++;}d[1][1]=cnt[1];d[1][0]=0;for(i=2;i<=ma;i++){d[i][1]=d[i-1][0]+1LL*cnt[i]*i;d[i][0]=max(d[i-1][1],d[i-1][0]);}printf("%I64d\n",max(d[ma][0],d[ma][1]));//d[1]=cnt[1];d[0]=0;//for(i=2;i<=ma;i++)//{//d[i]=max(d[i-1],d[i-2]+1ll*cnt[i]*i);//}////printf("%I64d\n",d[ma]);}}


0 0
原创粉丝点击