题目: 对于第n张牌,它的最大得分的bing的位置来源于两种情况:
1 上一张(得分只能递增) 2 相同值得最近位置 (可再次加分)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int last[N],dp[N];
int main()
{
int n,num;
while( cin>>n )
{
if ( !n ) break;
memset( last,0,sizeof last );
memset( dp,0,sizeof dp );
for ( int i=1; i<=n; i++ ) {
scanf("%d",&num);
if ( !last[num] ) dp[i] = dp[i-1];
else dp[i] = max( dp[last[num]] + ( num==999? 3:1 ) , dp[i-1] ) ;
last[num] = i;
}
cout<<dp[n]<<endl;
}
return 0 ;
}