hdu 4055
来源:互联网 发布:淘宝网体验中心在哪里 编辑:程序博客网 时间:2024/04/29 22:08
题解:dp题。 dp[i][j]表示前1到i的全排列中,最后一位是j的情况。状态转移是:当为‘I’时,dp[i][j] = dp[i - 1][1] +dp[i - 1][2] +...+dp[i -1][j - 1]但是这种情况 可能会出现重复的情况,比如 2,3,1后面会出现2,3,1,2的情况,但这种情况是不符合题意的,所以我们把大于等于j的数全部加1,这样就可以过度到下一个状态了。当为'D'和‘?’时同理。
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <map>using namespace std;const int maxn = 1100;const int mod = 1e9 + 7;char tt[maxn];long long dp[maxn][maxn];long long num[maxn][maxn];int main(){ while (~scanf("%s", tt + 1)) { int len = strlen(tt + 1) + 1; memset(dp, 0, sizeof(dp)); // num[1][1] = 1; memset(num, 0, sizeof(num)); num[0][0] = 1; num[1][1] = 1; for (int i = 2; i <= len; i ++) { for (int j = 1; j <= i; j ++) { if (tt[i - 1] == 'I') { dp[i][j] = num[i - 1][j - 1] % mod; } else if (tt[i - 1] == 'D') { dp[i][j] = (num[i - 1][i - 1] - num[i - 1][j - 1] + mod) % mod; } else dp[i][j] = num[i - 1][i - 1] % mod; num[i][j] = (num[i][j - 1] + dp[i][j]) % mod; } } printf("%lld\n", num[len][len]); }}
阅读全文
0 0
- hdu 4055
- hdu 4055
- hdu 4055
- hdu 4055
- hdu 4055 Number String
- hdu 4055Number string
- Hdu 4055 Number String
- hdu 4055 dp
- hdu 4055 Number String
- HDU 4055 Number String
- hdu 4055 Number String
- HDU 4055 Number String
- hdu 4055 dp
- hdu 4055(dp)
- HDU-4055 Number String
- HDU 4055 Number String
- HDU 4055 Number String
- hdu 4055 Number String
- 继承
- emWin使用资料收集(二) ----- 使用emWin和BmpCvt工具显示位图
- vue2 组件通信
- Laravel Carbon::diffForHumans 切换中文
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- hdu 4055
- wfi和wfe
- 原生JS轮播图
- 小米手机 miui 8.x开启开发者模式指导
- ubuntu 异常启动必须手动选择启动模式问题
- 生活虽然很多眼前的苟且,但要看到远方的田野
- theano dimshuffle的使用说明
- irp追踪工具_CreateFile_进行通讯 打印缓冲区数据
- 【教程】farmskins怎么玩