难度

不断网:☆☆☆

断网:☆☆☆☆

/*
卡特兰数取模 由于数据范围小,直接做。
考试时断网。忘记卡特兰数公式,推错了只有5分。
数学公式要记别每次都现用现搜!!!
*/
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int f[];
int n,m,ans; int main()
{
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
scanf("%d",&n);
f[]=;f[]=;
for(int i=;i<=n;i++)
for(int j=,k=i-;j<=i- && k>=;j++,k--)
f[i]+=(f[j]*f[k])%;
printf("%d",f[n]%);
return ;
}
/*
模数较小是一个坑点,直接做逆元可能爆掉(模数很小许多数没有逆元)
答案是 2n!/(n!*(n+1))! 如果直接逆元,2n!预处理很可能成为零,但做了除法后答案可能不是零,就会出错。
所以7的倍数要单独考虑
这里记录了7的倍数的因子里7的幂,然后分子分母就可以加加减减了。这个题用不到。
原来逆元还可以直接搞...
*/
#include<bits/stdc++.h> #define N 1007 using namespace std;
int n,m,d,c,r; int fac(int n)
{
r=;
for(int i=;i<=n;i++)
{
if(i%) r=r*i%;
else
{
int x=i;
while(x%==) {x/=;c+=d;r=r*x%;}
}
}return r;
} int inv(int x)
{
for(int i=;i<;i++)
if(i*x%==) return i;
} int main()
{
scanf("%d",&n);
d=;c=;
r=fac(*n);
int ans=(r*inv(fac(n))%*inv(fac(n+))%)%;
printf("%d\n",c?:ans);
return ;
}

/*
带权并查集
维护链底,链顶,并查集找链底,并维护链的大小
合并时两个链顶链底都要维护。别忘了链底size大小改为1。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 30007 using namespace std;
int n,m,ans,cnt;
int top[N],dep[N],siz[N]; int find(int x)
{
if(x==dep[x]) return x;
int tmp=dep[x];
dep[x]=find(tmp);
siz[x]+=siz[tmp];
return dep[x];
} void merge(int a,int b)
{
int r1=find(a),r2=find(b);
dep[r1]=top[r2];
top[r2]=top[r1];
siz[r1]=;
} int main()
{
freopen("cube.in","r",stdin);
freopen("cube.out","w",stdout);
int x,y;char ch;
scanf("%d",&n);
for(int i=;i<=n;i++) top[i]=dep[i]=i;
while(n--)
{
cin>>ch;
if(ch=='M')
{
scanf("%d%d",&x,&y);
merge(x,y);
}
else
{
scanf("%d",&x);find(x);
printf("%d\n",siz[x]);
}
}
return ;
}

/*
区间dp,情况有些多需要讨论
首先连续相同的颜色为了方便要合并,记录每个块的颜色,就可以dp了
dp[l][r]表示合并这段区间的最小步数,分几种情况
这段区间是奇数(为了避免区间长度为2的情况)
1. color[l]==color[r] && tot[l]+tot[r]==2 --> dp[l][r] 可从 dp[l+1][r-1]+1 转移过来。
2. color[l]==color[r] && tot[l]+tot[r]>2 --> dp[l][r] 可从 dp[l+1][r-1] 转移过来。
3. color[l]==color[k]==color[r](k∈(l,r) && [l,k],[k,r] 为奇数) -->可从dp[l+1][k-1]+dp[k+1][r-1]转移过来。
这段区间是偶数
普通的转移 dp[l][r] =min(dp[l][r] , dp[l][k]+dp[k+1][r]);
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 257 using namespace std;
int dp[N][N],col[N],a[N];
char s[N];
int n,m,ans; int main()
{
freopen("zuma.in","r",stdin);
freopen("zuma.out","w",stdout);
scanf("%s",s);n=strlen(s);
a[]=;m=;
for(int i=;i<n;i++)
{
if(s[i]==s[i-])
{
col[m]=s[i]==''?:;
a[m]++;
}
else
{
a[++m]=;
col[m]=s[i]==''?:;
}
} for(int len=;len<=m;len++)
{
for(int i=;i<=m;i++)
{
int j=i+len;
if(j>= && j<=m)
{
dp[i][j]=*n;
if(len==) dp[i][j]=-a[i];
else
{
for(int k=i;k<j;k++)
dp[i][j]=min(dp[i][k]+dp[k+][j],dp[i][j]); if((j-i)%==)
{
if(a[i]+a[j]==)
{
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]+);
} else
{
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]);
} if(a[i]+a[j]<)
for(int k=i+;k<j;k+=)
{
if(a[k]==) dp[i][j]=min(dp[i+][k-]+dp[k+][j-],dp[i][j]);
}
}
}
}
}
}
printf("%d\n",dp[][m]);
return ;
}

湖南集训Day1的更多相关文章

  1. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1

    目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...

  2. 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生

    题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...

  3. P3900 [湖南集训]图样图森破

    P3900 [湖南集训]图样图森破 链接 分析: 感觉像个暴力. 可以枚举回文串的回文中心,即枚举一个串,枚举一个串的位置作为回文中心,然后求出这个串内的回文串的长度. 此时如果回文串两端都没有到这个 ...

  4. 国庆集训 Day1 T2 生成图 DP

    国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...

  5. 2019暑期金华集训 Day1 组合计数

    自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...

  6. 2019暑期金华集训 Day1 数据结构

    自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...

  7. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

  8. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  9. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

随机推荐

  1. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

  2. POJ3624 0-1背包(dp+滚动数组)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 47440   Accepted: 20178 ...

  3. 【12】AngularJS 事件

    AngularJS 事件 AngularJS 有自己的 HTML 事件指令. ng-click 指令 ng-click 指令定义了 AngularJS 点击事件. <div ng-app=&qu ...

  4. 天猫双11红包前端jQuery

    [01]   浏览器支持:IE10+和其他现代浏览器.   效果图:       步骤:   HTML部分:   <div class="opacity" style=&qu ...

  5. cocos2dx 用命令行进行编译的指令

    cocos compile -p android -m release -s F:\cocosproj\antest --ap android-20 上面那条就是我常用的指令,这指令修改一下就成了你的 ...

  6. hrbust oj 1536 Leonardo's Notebook 置换群问题

    题目大意: 给出一个A~Z的置换G,问能否找到一个A~Z的置换G' 能够用来表示为 G = G'*G' 由定理: 任意一个长为 L 的置换的k次幂,都会把自己的每一个循环节分裂成gcd(L, K)份, ...

  7. 438D - The Child and Sequence

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  8. 如何用js往html页面拼接一个div包括div的各种常用属性

    $("#div").append("<table><tr align='center'>" +"<td >&quo ...

  9. 免XML的SpringMVC配置

    Servlet 3.0以后,新增了一些注解,使得web.xml可以省略掉.这样配合Spring的JavaConfig就可以实现免xml的项目配置,这里简单搭建一个免XML的SpringMVC.Spri ...

  10. Java使用JNA调用DLL库

    Java调用DLL方法有三种,JNI.JNA.JNative, 本文为JNA JNA为使用jna.jar包,下载地址:http://www.java2s.com/Code/Jar/j/Download ...