dp问题总结
2016-03-13 00:06
776 查看
从今天开始,每次的dp问题都码在这里
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=677&pid=1003
这道题是一道典型的dp问题,采用递推的方式解决。首先初始化数组dp的前几项为dp = {0,26,676,17576,456950},以下是这道题的思路:
dp[i]是在dp[i-1]上增加了最后一个字符,有26种情况,但是有不符合要求的要减掉。不符合要求的情况就是第i i-1 i-2 i-3个字符都相同,同时和第i-4个字符不同。所以,不符合要求的情况为dp[i-4]*25种。
综上:dp[i]=dp[i-1]*26-dp[i-4]*25
本来这道题就是这样,但是涉及到取模的问题。列出几条取模的性质:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
所以应用到本题种,变成dp[i]=((dp[i-1]*26-dp[i-4]*25)%M+M)%M
其中M=1000000007
代码如下:
/[b]***************************************************************[/b]
File Name: 1003.cpp
Author: wxc575843
Mail: wxc575843@163.com
Created Time: 六 3/12 20:28:49 2016
[b]**************************************************************[/b]/
1. 国王的游戏
题目如下:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=677&pid=1003
这道题是一道典型的dp问题,采用递推的方式解决。首先初始化数组dp的前几项为dp = {0,26,676,17576,456950},以下是这道题的思路:
dp[i]是在dp[i-1]上增加了最后一个字符,有26种情况,但是有不符合要求的要减掉。不符合要求的情况就是第i i-1 i-2 i-3个字符都相同,同时和第i-4个字符不同。所以,不符合要求的情况为dp[i-4]*25种。
综上:dp[i]=dp[i-1]*26-dp[i-4]*25
本来这道题就是这样,但是涉及到取模的问题。列出几条取模的性质:
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
所以应用到本题种,变成dp[i]=((dp[i-1]*26-dp[i-4]*25)%M+M)%M
其中M=1000000007
代码如下:
/[b]***************************************************************[/b]
File Name: 1003.cpp
Author: wxc575843
Mail: wxc575843@163.com
Created Time: 六 3/12 20:28:49 2016
[b]**************************************************************[/b]/
#include<iostream> using namespace std; int M=1000000007; long long int dp[2001]={0,26,676,17576,456950}; void init(){ for(int i=5;i<2001;i++){ dp[i]=((dp[i-1]*26-dp[i-4]*25)%M+M)%M; } } void solve(){ int len; cin >> len; cout<<dp[len]<<endl; } int main(){ int n; init(); cin>>n; while(n--){ solve(); } return 0; }
相关文章推荐
- 编写事件简单机制
- java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
- codeforces_628C. Bear and String Distance
- POJ 2387 图论之最短路【三种写法】
- UVA 562 分钱(01背包)
- 20145240《Java程序设计》第二周学习总结
- IPTABLES设置
- python入门笔记_1
- 可以写了十年程序,但最好不要十年只能写程序
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- AndroidStudio下加入百度地图的使用(一)——环境搭建
- 搭建Git服务器
- discuz的php7版本
- 数据库四种隔离级别
- ZOJ 3326 日历 (打表)
- 走近AbstractQueuedSynchronizer
- HDU 5296 Annoying problem dfs序 lca
- LruCache的深入解析
- PHP实现文件上传与下载实例与总结
- php 无限级分类 获取顶级分类ID