DES: 这是一个新的游戏。给你一套牌、编号从1到100000.正常来说。你手中的牌和这次翻的牌是一样的,就会加一分。但是。如果是999的话。加三分。所以问你最大的分是多少。
貌似是简单的DP吧。(DP菜鸟...再简单我也不会...T_T...)于是...我看懂了...但是不可言传....~~~~(>_<)~~~~好难的好吗...
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define N 100000+10int 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; }