DES: 这是一个新的游戏。给你一套牌、编号从1到100000.正常来说。你手中的牌和这次翻的牌是一样的,就会加一分。但是。如果是999的话。加三分。所以问你最大的分是多少。
貌似是简单的DP吧。(DP菜鸟...再简单我也不会...T_T...)于是...我看懂了...但是不可言传....~~~~(>_<)~~~~好难的好吗...
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define N 100000+10 int vis[N]; int num[N]; int dp[N]; int main() { int n; while(cin >> n) { if (n == 0) break; memset(vis, 0, sizeof(vis)); memset(num, 0, sizeof(num)); memset(dp, 0, sizeof(dp)); for (int i=0; i<n; ++i) { cin >> num[i]; } int pre = num[0]; int nnext; vis[pre] = 1; int ans = 0; for (int i=1; i<n; ++i) { nnext = num[i]; if (!vis[nnext]) { vis[nnext] = 1; dp[nnext] = dp[pre]; } else { if (nnext == 999) { dp[nnext] = max(dp[pre], dp[nnext]+3); } else { dp[nnext] = max(dp[pre], dp[nnext]+1); } } pre = nnext; if (ans < dp[nnext]) ans = dp[nnext]; } cout << ans << endl; } return 0; }