都是经典题了吧。。我好无聊。。

4806

4806-1801是双倍经验。。DP方程看代码吧。。

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; #define ll long long
//#define P 9999973 //bzoj1801
#define P 999983 //bzoj4806
#define C(x) ((x)*(x-1)/2)
int n,m;
ll f[][][]; int main(){
scanf("%d%d",&n,&m);
f[][][]=;
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
for (int k=;k<=m-j;k++){
f[i][j][k]+=f[i-][j][k];
if (j>=) f[i][j][k]+=f[i-][j-][k]*(m-j-k+);
if (k>= && j<=m-)f[i][j][k]+=f[i-][j+][k-]*(j+);
if (j>=) f[i][j][k]+=f[i-][j-][k]*C(m-j-k+);
if (k>= && j<=m-)f[i][j][k]+=f[i-][j+][k-]*C(j+);
if (j>= && k>=) f[i][j][k]+=f[i-][j][k-]*j*(m-j-k+);
f[i][j][k]%=P;
}
}
}
ll ans=;
for (int i=;i<=m;i++){
for (int j=;j<=m-i;j++){
ans+=f[n][i][j];
ans%=P;
}
}
printf("%lld\n",ans);
return ;
}

4807

就是 max(m,n) C min (m,n)

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
struct INT {
int b,a[];
INT (){b=; for (int i=;i<=;i++) a[i]=;}
};
int A,B,c,n,m;
int P[],p[],cnt[],ip[];
INT Int(int x){
INT a;
for (a.b= ; x ; a.a[++a.b]=x%,x/=);
return a;
} INT operator * (const INT &x,const INT &y){
INT a;
a.b=min(,x.b+y.b-);
for (int i=;i<=x.b;i++) for (int j=;j<=y.b;j++) if (i+j-<=) a.a[i+j-]+=x.a[i]*y.a[j];
for (int i=;i<=a.b;a.b+=(i==a.b && a.a[i+] && i+<=),i++) a.a[i+]+=a.a[i]/,a.a[i]%=;
for (;a.a[a.b]== && a.b!=; a.b--);
return a;
} void print_INT(INT x){
for (int i=min(x.b,);i>=;i--) printf("%d",x.a[i]);
puts("");
} void Prime(int n){
for (int i=;i<=n;i++){
if (!P[i]){
p[++c]=i,ip[i]=c;
for (int j=i+i;j<=n;j+=i) P[j]=;
}
}
} void pt(int x) {
printf("%d\n",x);
} void fac(int x,int y){
for (int i=;i<=c && P[x];i++) while (!(x%p[i])) x/=p[i],cnt[i]+=y;
cnt[ip[x]]+=y;
} INT ans=Int();
int main(){
scanf("%d%d",&A,&B);
n=max(A,B),m=max(max(A,B)-min(A,B),min(A,B));
Prime(n);
for (int i=m+;i<=n;i++) fac(i,);
for (int i=;i<=n-m;i++) fac(i,-);
for (int i=;i<=c;i++) while (cnt[i]--) ans=ans*Int(p[i]);
print_INT(ans);
return ;
}

4808

黑白染色然后匈牙利

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; struct edge{
int next,to;
}e[];
int ade,n,m,cnt,T,c;
int x[]={,,-,-,-,,,-};
int y[]={,,-,-,,-,-,};
int mp[][],id[][],first[],vis[],match[]; void addedge(int x,int y){
e[++ade].next=first[x];
e[ade].to=y;
first[x]=ade;
} bool check(int x,int y){
return (x>= && x<=n && y>= && y<=m && !mp[x][y]);
} #define s e[x].to
bool hungary(int p){
for (int x=first[p];x;x=e[x].next){
if (vis[s]!=T){
vis[s]=T;
if (!match[s] || hungary(match[s])) {match[s]=p; return ;}
}
}
return ;
}
#undef s int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
scanf("%d",&mp[i][j]);
cnt+=(!mp[i][j]);
id[i][j]=++c;
}
}
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (((i+j)&) && !mp[i][j])for (int k=;k<;k++) if (check(i+x[k],j+y[k])) addedge(id[i][j],id[i+x[k]][j+y[k]]);
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
if (!mp[i][j] && ((i+j)&)){
T=id[i][j];
cnt-=hungary(T);
}
}
}
printf("%d\n",cnt);
return ;
}

4809

直接dfs

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; int n,ans;
int ban[][],y[],a[],b[]; void dfs(int i){
if (i>n) {ans++; return;}
for(int j=;j<=n;j++) if (!(ban[i][j] || y[j] || a[i+j-] || b[n-i+j] )){
y[j]=a[i+j-]=b[n-i+j]=;
dfs(i+);
y[j]=a[i+j-]=b[n-i+j]=;
}
} int main(){
scanf("%d",&n);
for (int i=;i<=n;i++) for (int j=;j<=n;j++) scanf("%d",&ban[i][j]);
dfs();
printf("%d\n",ans);
return ;
}

皇后

【bzoj4806~bzoj4809】 象棋四连发 DP-高精度-匈牙利算法-dfs的更多相关文章

  1. 匈牙利算法dfs模板 [二分图][二分图最大匹配]

    最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对 ...

  2. 匈牙利算法 DFS模板(了解度+1)

    //算法核心是求最大匹配数 #include<bits/stdc++.h> #include<iostream> #include<cstdio> #include ...

  3. 二分图最大匹配(匈牙利算法Dfs模板)

    #include<iostream> #include<cstdio> #include<cstring> #define maxn 2020 using name ...

  4. POJ-1469 COURSES ( 匈牙利算法 dfs + bfs )

    题目链接: http://poj.org/problem?id=1469 Description Consider a group of N students and P courses. Each ...

  5. ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

    //匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...

  6. HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)

    题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...

  7. "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)

    博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...

  8. cogs 728. [网络流24题] 最小路径覆盖问题 匈牙利算法

    728. [网络流24题] 最小路径覆盖问题 ★★★☆   输入文件:path3.in   输出文件:path3.out   评测插件时间限制:1 s   内存限制:128 MB 算法实现题8-3 最 ...

  9. 1166 矩阵取数游戏[区间dp+高精度]

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [ ...

随机推荐

  1. mysql表的增删改查

    一.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 二.创建表 cr ...

  2. python's seventh day for me set

    数据类型的补充: 对于元祖:  如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('顾清秋') tul = ('顾清秋',) print(type(tu)) ...

  3. activemq artemis安装运行及其在springboot中的使用

    安装 创建broker 在springboot中的使用 依赖 配置 Producer Consumer Rest使用 安装 http://activemq.apache.org/artemis/dow ...

  4. Python Twisted架构英文版

    原作出处:twisted-intro 作者:Dave 转载声明:版权归原作出处所有,转载只为让更多人看到这部优秀作品合集,如果侵权,请留言告知 Twisted Introduction This mu ...

  5. UML中关系的分类及其概念——总结备忘

    UML中关系分类: 依赖:依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义. 关联:关联是类与类之间的联接,它使一个类知道另一类的属性和方法. 聚合:聚合 ...

  6. 上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中

    上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中 前端:要用到一个插件,点击下载 <!DOCTYPE html> <html xmlns=&q ...

  7. Spring整合Junit4进行单元测试

    一. 添加依赖包(maven) <dependency> <groupId>junit</groupId> <artifactId>junit</ ...

  8. 【原创】0. MYSQL++的环境准备

    1. 获取 Google MYSQL++,第一个就是,然后跟着要求进行下载. 2. 编译和安装 其实在作者的各种README文档里面已经写得很清楚了,现在对一些可能会出现问题的地方进行一下回顾. Wi ...

  9. mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思

    [windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...

  10. Build Path

    ------------siwuxie095 什么是 Build Path? 为什么使用 Build Path? 如: (1)创建一个Java工程:LearnBuildPath (2)点击 Next, ...