TopCoder SRM 582 ColorfulBuilding
DP 思路是三维,但是时间肯定会超时,需要根据其特殊性质加两个标记数组,优化成二维。
刚开始想了N久N久,没感觉,还是动手画了一下才有用呀,意淫再久,不如动手呀。
代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<set>
#include<map> using namespace std;
const int INF=0x3f3f3f3f;
const long long MOD=1000000009;
const int N=3000;
const int M=2500;
long long dp[N][M];
long long sum[M],a[N];
int getInt(char x)
{
if(x>='A'&&x<='Z')
return x-'A';
return x-'a'+26;
}
int hashChartoInt(char x,char y)
{
return getInt(x)*52+getInt(y);
}
long long add(long long x,long long y)
{
long long s=x+y;
if(s>=MOD) s-=MOD;
return s;
}
long long sub(long long x,long long y)
{
long long s=x-y;
if(s<=0) s+=MOD;
return s;
}
long long mul(long long x,long long y)
{
return (x*y)%MOD;
}
class ColorfulBuilding
{
public:
int count(vector <string> color1, vector <string> color2, int L)
{
memset(dp,0,sizeof(dp));
memset(sum,0,sizeof(sum));
memset(a,0,sizeof(a));
string str1="",str2="";
for(unsigned int i=0;i<color1.size();++i)
str1+=color1[i];
for(unsigned int i=0;i<color2.size();++i)
str2+=color2[i];
int n=str1.size();
for(int j=0;j<N;++j)
a[j]=1;
for(int i=0;i<n;++i)
{
int nowColor=hashChartoInt(str1[n-i-1],str2[n-i-1]);
if(i==0)
{
dp[nowColor][1]=1;
sum[1]=1;
continue;
}
for(int j=L;j>=1;--j)
{
dp[nowColor][j]=mul(dp[nowColor][j],a[nowColor]);
sum[j]=mul(sub(sum[j],dp[nowColor][j]),i);
dp[nowColor][j]=(dp[nowColor][j]*(i+1))%MOD;
dp[nowColor][j]=add(dp[nowColor][j],sub(sum[j-1],mul(dp[nowColor][j-1],a[nowColor])));
sum[j]=add(sum[j],dp[nowColor][j]);
}
for(int j=0;j<N;++j)
if(j==nowColor)
a[j]=1;
else
a[j]=mul(a[j],i);
}
return (int)(sum[L]);
}
};
TopCoder SRM 582 ColorfulBuilding的更多相关文章
- TopCoder SRM 582 Div 1 - Problem 1000 SemiPerfectPower
首先我们可以把答案差分,那么我们只需要求出\(1\)~\(x\)范围内的满足条件的数即可. 题目要求的应该是这个东西的个数: \(l \leq a*b^c \leq r(1 \le a < b) ...
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- Topcoder Srm 673 Div2 1000 BearPermutations2
\(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
随机推荐
- 使用bufferevent进行libevent服务端和客户端的开发
参考了网上的一些例子,实验了基于bufferevent的开发. 首先是服务端: #include <netinet/in.h> #include <sys/socket.h> ...
- Centos7 PHP7 编译安装 开机自启动
1.PHP7.0.13下载 wget http://cn2.php.net/get/php-7.0.13.tar.gz/from/this/mirror 2.解压 .tar.gz 3. 进入目录 cd ...
- Android 进入页面默认定位到ListView的解决方法
由于ListView会默认去获取焦点,如果说ListView在页面的下方的话,那么点击条目进入新页面并退出,那么这时候就会定位到ListView这里,而不是展示头部. 解决这个问题,只需要在Lis ...
- Maven——使用Nexus搭建Maven私服
原文:http://www.cnblogs.com/xdp-gacl/p/4068967.html Maven学习总结(九)--使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要 ...
- EL 表达式
转载自 :http://blog.csdn.net/qwerasdf123/article/details/4189889 EL表达式 1.EL简介 1)语法结构 ${expr ...
- Illegal mix of collations (big5_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
解释: 非法的混合排序规则(big5_chinese_ci)和(utf8_general_ci)操作“like”. 原本是单个字段查询数据的,现在是把所有的字段用一个搜索框来查询. 主要出问题是下列这 ...
- association ,collection
mybatis 出现这个错误Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 2 ...
- 解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg
解决由于一个软件限制策略的阻止,windows无法运行此程序cmd.reg Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFT ...
- The Economist
The turning point in the process of growing up is when you discover the core of strength within yo ...
- Linq分页查询
//Linq分页查询 int pageIndex = Convert.ToInt32(HttpContext.Current.Request["PageIndex"]); int ...