Codeforces Beta Round #17 C. Balance DP
来源:互联网 发布:大数据与软件工程 编辑:程序博客网 时间:2024/06/08 18:33
题目链接:这里
题意:你可以使得一个元素变成他周围的元素的颜色,可以改变无数次,现在给你一个串,问你一共有多少种方案,使得a和b和c的个数相差不超过1。
题解:dp[i][a][b][c],表示考虑到第i个位置,当前有a个a,b个b,c个c 的方案数
然后转移就好了
维护一个next[i][3]表示下一个在哪儿。
虽然是4维dp,但是却是150 50 50 50 的
//CF 17C#include <bits/stdc++.h>using namespace std;const int mod = 51123987;int n, dp[152][52][52][52], nxt[152][3];void add(int &x, int y){ x = x + y; if(x>=mod) x%=mod;}int main(){ scanf("%d", &n); string s; cin >> s; for(int j = 0; j < 3; j++) nxt[n][j] = n; for(int i = n - 1; i >= 0; i--){ for(int j = 0; j < 3; j++){ nxt[i][j] = nxt[i+1][j]; } nxt[i][s[i]-'a'] = i; } dp[0][0][0][0] = 1; int ans = 0; for(int i = 0; i < n; i++){ for(int a = 0; a*3 <= n+2; a++){ for(int b = 0; b*3 <= n+2; b++){ for(int c = 0; c*3 <= n+2 && a+b+c<=n; c++){ if(dp[i][a][b][c]){ if(a+b+c==n&&abs(a-c)<=1&&abs(b-c)<=1&&abs(a-c)<=1) add(ans, dp[i][a][b][c]); add(dp[nxt[i][0]][a+1][b][c], dp[i][a][b][c]); add(dp[nxt[i][1]][a][b+1][c], dp[i][a][b][c]); add(dp[nxt[i][2]][a][b][c+1], dp[i][a][b][c]); } } } } } printf("%d\n", ans); return 0;}
0 0
- Codeforces Beta Round #17 C. Balance DP
- Codeforces Beta Round #17 C. Balance DP
- Codeforces Beta Round #17 C. Balance (字符串计数 dp)
- CodeForces 17C Balance (DP)
- CodeForces - 17C Balance(DP)
- Codeforces Beta Round #71 C【KMP+DP】
- Codeforces Beta Round #13, problem: (C) Sequence DP
- Codeforces Beta Round #90, problem: (C) Education Reform DP
- Codeforces Beta Round #96 (Div. 1) C. Logo Turtle (DP)
- Codeforces Beta Round #96 (Div. 2) (DP)
- 【dp】Codeforces Beta Round #2 B
- Codeforces Beta Round #2--B题 (DP)
- Codeforces Beta Round #10 D. LCIS(DP)
- Codeforces Beta Round #51 D 数位DP
- Codeforces Beta Round #51 D 数位DP
- Codeforces Beta Round #69 (Div. 1 Only), problem: (C) Beavermuncher-0xFF 树形DP+优先队列
- Codeforces Beta Round #50, problem: (C) First Digit Law 数位DP
- Codeforces Beta Round #2 A map B dp C 模拟退火
- C++ delete错误
- 归并排序
- 搬家结束~~~
- sqlalchemy一对多的关系表案例
- [OpenGL]矩阵乘法引发的血案
- Codeforces Beta Round #17 C. Balance DP
- Matplotlib进阶:Seaborn教程
- JSON之stringify()、parse()
- Java提高篇(二六)------hashCode
- [nginx] upstream结束和keepalive实现
- spring的学习(二)
- 跟踪分析Linux内核的启动过程
- 传输层协议
- 关键词break, python