题解

一道很不错的动态规划问题,首先这些印章一定是s的子串。
我们可以枚举s的子串然后进行check。
如何check,成了这道题的关键。

由于盖章的顺序不知道,所以我们可以使用动态规划的方法。
我们定义状态:
dp[i][j]dp[i][j]dp[i][j]表示的是sss串的前i" role="presentation" style="position: relative;">iii个被完美盖上,并且Stamp刚好盖到第jjj个,的bool值。

这样最终的答案就是dp[len(s)−1][len(stamp)−1]" role="presentation" style="position: relative;">dp[len(s)−1][len(stamp)−1]dp[len(s)−1][len(stamp)−1]dp[len(s)-1][len(stamp)-1]。

转移方程:
我们枚举i、ji、ji、j,选择一个dp[i][j]=1dp[i][j]=1dp[i][j] = 1的i,ji,ji,j出发,
当我们考虑它能转移到的状态:
当s[i+1]==stamp[j+1]s[i+1]==stamp[j+1]s[i+1] == stamp[j+1]说明 dp[i+1][j+1]=1dp[i+1][j+1]=1dp[i+1][j+1] = 1
当s[i+1]==stamp[0]s[i+1]==stamp[0]s[i+1] == stamp[0],说明dp[i+1][0]=1dp[i+1][0]=1dp[i+1][0] = 1,因为新盖的章可以把当前这个章给盖住。
当j==len(stamp)−1j==len(stamp)−1j == len(stamp)-1的时候,说明当前的章已经完全盖住了s[0-i]的后缀串。
因此我们考虑所有的s[i+1]==stamp[jj]s[i+1]==stamp[jj]s[i+1] == stamp[jj],现在可以随便盖,因为前面的部分都会被刚才那个章子覆盖掉。
也就有dp[i+1][jj]=1dp[i+1][jj]=1dp[i+1][jj] = 1

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <set>
using namespace std;
const int maxn = 155;
string os;
int n;
int dp[maxn][maxn];
bool check(string ps){if(ps[0] != os[0]) return 0;memset(dp,0,sizeof(dp));dp[0][0] = 1;for(int i = 0;i < os.size()-1;++i){for(int j = 0;j < ps.size();++j){if(!dp[i][j]) continue;if(os[i+1] == ps[(j+1)%ps.size()]) dp[i+1][(j+1)%ps.size()] = 1;if(os[i+1] == ps[0])dp[i+1][0] = 1;}if(dp[i][ps.size()-1]){for(int j = 0;j < ps.size();++j){if(os[i+1] == ps[j])dp[i+1][j] = 1;}}}return dp[os.size()-1][ps.size()-1];}
int main(){cin>>os;n = os.length();set<string>st;for(int i = 0;i < n;++i){for(int j = i;j < n;++j){string ps = os.substr(i,j-i+1);if(check(ps)) st.insert(ps);}}for(auto as : st){cout<<as<<endl;}return 0;
}

codeforces gym-101745 D-Stamp Stamp Stamp动态规划相关推荐

  1. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

    Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思. 这里用到的思想是归并排序! 多路归并排序 ...

  2. Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)

    Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven) 题目来源: Codeforces 题意: 给出一些比赛, ...

  3. [Codeforces Gym 101651/100725B] Banal Tickets

    Codeforces Gym 100725 题解: 先分两种情况, 积为000与积非0" role="presentation" style="position ...

  4. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  5. Codeforces Gym 100269 Dwarf Tower (最短路)

    题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a new game na ...

  6. Codeforces Gym 100676G Training Camp 状压dp

    http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...

  7. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  8. Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset

    Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...

  9. Codeforces Gym 100650B Countdown (离线)

    题目链接:http://codeforces.com/gym/100650 根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目. dfs一个结点前保存询问深 ...

  10. Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)

    题目链接 http://codeforces.com/gym/101630/attachments 题解 zyb学长的题. 先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x ...

最新文章

  1. vivado VIO (virtual input output)虚拟IO的使用
  2. Altium Designer铺铜时抠铜
  3. 2019.08 me
  4. 史蒂夫乔布斯6月斯坦佛大学演讲: 必须找到你所钟爱的东西
  5. 根据谁创建资源授权资源
  6. 【MyBatis框架】高级映射-一对一查询
  7. 别找了,你要的中国民间神话故事在这里!
  8. (转) MCU实战经验---多种的按键处理
  9. NickLee.FortuneBase(2010.1_B) For Oracle92i/10g/11g
  10. Oracle 11g RAC 环境下单实例非缺省监听及端口配置
  11. 通过ip地址定位计算机,局域网通过IP地址如何找到电脑的位置
  12. 实验三.局域网的组建
  13. 转载python3爬虫(2)下载有固定链接的视频
  14. 如何理解APS系统的生产排程?
  15. php进程是什么,PHP的进程模型是什么
  16. Linux 性能调试 之 drop_caches
  17. openfire4.2.1 + smack4.2.2即时通信工具开发(android端登录、发送消息、接收消息)
  18. 百分浏览器cent browser 和他的扩展程序朋友们
  19. 观《当幸福来敲门》有感
  20. VSCode取消注释斜体

热门文章

  1. python自然语言处理_python
  2. 利用vector实现一对一(pair<int,int>)
  3. c语言glut打正方形,OpenGL绘制正方形并用键盘移动
  4. 蓝桥杯2015初赛-牌型种数-dfs
  5. safari浏览器的使用tips
  6. c语言加花指令,花指令的应用
  7. kodi pvr 不能安装_「家庭影音串流」电视最强播放器KODI使用方法
  8. opencv 常见细碎问题解决
  9. (CCPC 2020 网络选拔赛)HDU 6900 Residual Polynomial(分治 + NTT)
  10. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力