DP
http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3862&konwledgeId=42
#include <bits/stdc++.h> using namespace std; #define maxn 100009 const int MOD = 1e9 + 7; int main() { int n; int a[maxn]; int dp[maxn]; int cnt[11]; while (~scanf("%d",&n)) { memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for (int i = 1;i<=n;i++) { scanf("%d",&a[i]); } dp[0] = 1; for (int i = 1;i<=n;i++) { memset(cnt,0,sizeof(cnt)); for (int j = 0;j<i;j++) { cnt[a[i-j]]++; if (cnt[a[i-j]] > 1) { break; } dp[i] = (dp[i] + dp[i-j-1])%MOD; } } printf("%d\n",dp[n]); } return 0; }
https://hihocoder.com/problemset/problem/1482
#include <bits/stdc++.h> using namespace std; const int MOD = 1e9 + 7; int dp[100000 + 1000][2][3]; long long Add(int a,int b) { long long ans = (a+b)%MOD; return ans; } void Init() { memset(dp,0,sizeof(dp)); dp[0][0][0] = 1; for (int i = 0;i<100000;i++) { for (int j = 0;j<2;j++) { for (int k = 0;k<3;k++) { dp[i+1][j][0] = Add(dp[i+1][j][0],dp[i][j][k]); if (j != 1) { dp[i+1][j+1][0] = Add(dp[i+1][j+1][0],dp[i][j][k]); } if (k != 2) { dp[i+1][j][k+1] = Add(dp[i+1][j][k+1],dp[i][j][k]); } } } } } int main() { int n; Init(); while (~scanf("%d",&n)) { int ans = 0; for (int i = 0;i<2;i++) { for (int j = 0;j<3;j++) { //printf("%d ",dp[n][i][j]); ans = Add(ans,dp[n][i][j]); } } printf("%d\n",ans); } return 0; }
爱程序 不爱bug
爱生活 不爱黑眼圈
我和你们一样 我和你们不一样
我不是凡客 我要做geek
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步