【USACO 2006 November Gold】Corn Fields
2024-08-28 21:06:56
【题目链接】
【算法】
状压DP
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 12
#define MOD 100000000 int M,N,i,j,k,ans,state;
int ST[MAXN+][(<<)+],f[MAXN+][(<<)+],cnt[MAXN+],mat[MAXN+][MAXN+]; template <typename T> inline void read(T &x) {
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = x * + c - '';
x *= f;
}
template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x) {
write(x);
puts("");
} inline void dfs(int dep) {
if (dep > N) ST[i][++cnt[i]] = state;
else {
dfs(dep+);
if (mat[i][dep]) {
if ((dep == ) || (!(state & ( << (N - dep + ))))) {
state |= ( << (N - dep));
dfs(dep+);
state &= (~( << (N - dep)));
}
}
}
} int main() { read(M); read(N); for (i = ; i <= M; i++) {
for (j = ; j <= N; j++) {
read(mat[i][j]);
}
} for (i = ; i <= M; i++) dfs(); for (i = ; i <= cnt[]; i++) f[][i] = ;
for (i = ; i <= M; i++) {
for (j = ; j <= cnt[i]; j++) {
for (k = ; k <= cnt[i-]; k++) {
if (!(ST[i][j] & ST[i-][k]))
f[i][j] = (f[i][j] + f[i-][k]) % MOD;
}
}
} for (i = ; i <= cnt[M]; i++) ans = (ans + f[M][i]) % MOD;
writeln(ans); return ; }
最新文章
- js sort() 排序的问题
- POSTGRESQL9.5之pg_rman工具
- 关于automatic_Panoramic_Image_Stitching_using_Invariant_features 的阅读笔记(2)
- SPOJ 416 - Divisibility by 15(贪心)
- 使用react-native做一个简单的应用-06商品界面的实现
- Linux--线程安全与可重入函数的异同
- 入职这一段时间的总结,Don&#39;t Repeat Yourself.
- Akka(19): Stream:组合数据流,组合共用-Graph modular composition
- HDU - 1584 IDA*
- vue-router导航守卫(router.beforeEach())的使用
- 命令行神器之argparse使用笔记
- SSIS获得Excel行号(转自http://blog.csdn.net/zplume/article/details/19113911)
- python的迭代器
- SpringDataJPA与Mybatis的优异性
- 【转】Android中dip(dp)与px之间单位转换
- linux上安装mysql,亲试成功
- java获取文件路径
- Vue与Element走过的坑。。。。带上Axios
- 一个高性能的对象属性复制类,支持不同类型对象间复制,支持Nullable<;T>;类型属性
- M0 M4时钟控制(一)