Topcoder SRM 584 DIV1 600
思路太繁琐了 ,实在不想解释了
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<algorithm>
#include<queue> #define ull unsigned long long
#define ll long long
#define lint long long
using namespace std; const int INF=0x3f3f3f3f;
const int N=53;
ll c[N][N];
ll dp[N][N][N];
ll dp1[N][N][N];
class Excavations
{
public:
long long count(vector <int> kind, vector <int> depth, vector <int> found, int K)
{
memset(c,0,sizeof(c));
for(int i=0;i<N;++i)
for(int j=0;j<=i;++j)
if(j==0||i==j)
c[i][j]=1;
else
c[i][j]=c[i-1][j]+c[i-1][j-1];
int n=kind.size();
int m=found.size(); set<int>st;
for(int i=0;i<n;++i)
st.insert(depth[i]);
int dep=1;
for(set<int>::iterator it=st.begin();it!=st.end();++it,++dep)
{
for(unsigned int i=0;i<depth.size();++i)
if((*it)==depth[i])
depth[i]=dep;
}
sort(found.begin(),found.end());
vector<int>f[N];
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
if(kind[j]==found[i])
f[i].push_back(depth[j]);
sort(f[i].begin(),f[i].end());
}
memset(dp,0,sizeof(dp));
dp[0][0][0]=1;
for(int i=0;i<m;++i)
for(int d=0;d<=n;++d)
for(int w=0;w<K;++w)
if(dp[i][d][w]>0)
{
for(unsigned int l=0;l<f[i].size();++l)
{
for(int x=0;x<=l&&w+x+1<=K;++x)
{
dp[i+1][max(d,f[i][l])][w+x+1]+=dp[i][d][w]*c[l][x];
}
}
}
bool fd[N];
memset(fd,false,sizeof(fd));
for(int i=0;i<m;++i)
fd[found[i]]=true;
vector<int>vd;
int h=0;
for(int i=0;i<n;++i)
if(!fd[kind[i]])
{
vd.push_back(depth[i]);
h=max(h,depth[i]);
}
sort(vd.begin(),vd.end());
int ln=vd.size();
memset(dp1,0,sizeof(dp1));
dp1[ln][n+1][0]=1;
for(int i=ln;i>0;--i)
for(int d=1;d<=n+1;++d)
for(int w=0;w<=ln;++w)
if(dp1[i][d][w])
{
dp1[i-1][d][w]+=dp1[i][d][w];
dp1[i-1][vd[i-1]][w+1]+=dp1[i][d][w];
}
ll s[N]={0};
for(int i=0;i<n;++i)
if(fd[kind[i]])
{
for(int j=1;j<=depth[i];++j)
s[j]++;
}
ll sum=0;
for(int d=2;d<=n+1;++d)
for(int w=0;w<=ln;++w)
if(dp1[0][d][w])
{
for(int d1=1;d1<d;++d1)
for(int w1=1;w1+w<=K;++w1)
if(dp[m][d1][w1])
{
if(s[d]>=K-w1-w)
{
sum+=(dp1[0][d][w]*dp[m][d1][w1]*c[s[d]][K-w-w1]);
}
}
}
return sum;
}
};
Topcoder SRM 584 DIV1 600的更多相关文章
- 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 722 Div1 Problem 600 DominoTiling(简单插头DP)
题意 给定一个$12*12$的矩阵,每个元素是'.'或'X'.现在要求$1*2$的骨牌铺满整个矩阵, 'X'处不能放置骨牌.求方案数. 这道题其实和 Uva11270 是差不多的,就是加了一些条件. ...
- SRM 146 DIV1 600
Problem Statement Masterbrain is a two player board game in which one player decides on a secre ...
- topcoder srm 714 div1
problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...
- topcoder srm 738 div1 FindThePerfectTriangle(枚举)
Problem Statement You are given the ints perimeter and area. Your task is to find a triangle wi ...
- Topcoder SRM 602 div1题解
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...
- Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串
Problem Statement The Happy Letter game is played as follows: At the beginning, several players ...
- TopCoder SRM 605 DIV1
604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...
随机推荐
- [转载] 深入 nginx 架构
原文: http://www.cnbeta.com/articles/402709.htm 了解 nginx 架构帮助我们学习如何开发高性能 web 服务. 为了更好地理解设计,你需要了解NGINX是 ...
- Codeforces723E One-Way Reform【欧拉回路】
题意:给你n点m边的图,然后让你确定每条边的方向,使得入度=出度的点最多 . 度数为偶数的点均能满足入度 = 出度. 证明:度数为奇数的点有偶数个,奇度点两两配对连无向边,则新图存在欧拉回路,则可使新 ...
- sscanf的用法(转)
队长做上海邀请赛的I题时遇到一个棘手的问题,字符串的处理很麻烦,按传统的gets全部读入的话还要做N多处理,太浪费时间. 回来之后搜了一下sscanf的用法发现可以很好的解决这一类问题,各种百度,转来 ...
- odoo中pos模块由于删除partner导致发生(你试图访问的单据已经删除)错误的解决方法
model.js文件中 push_order: function(order) { var self = this; if(order){ this.proxy.log('push_order',or ...
- CentOS下源码安装MySQL
一.创建mysql用户与组,相关目录 useradd mysql -s /sbin/nologin mkdir /usr/local/mysql chown -R mysql.mysql mkdir ...
- iOS开发 Date转字符串
+ (NSString *)formatterDate:(NSNumber *)desDate WithDateFormatter:(NSString *)formatter{ NSDateForma ...
- php输出csv文件 简单实现
<?php $list = array ( "George,John,Thomas,USA", "James,Adrew,Martin,USA", ); ...
- 堆排序(C语言)
#ifndef HEAP_SORT_H #define HEAP_SROT_H #include<iostream> void maxHeap(int *arr,unsigned int ...
- 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法
在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...
- java.lang.ClassNotFoundException: org.apache.http.util.Args
java.lang.ClassNotFoundException: org.apache.http.util.Args at org.apache.catalina.loader.WebappClas ...