摘要: 这个题目是个挺难表示的状态DP,因为不但要考虑上下还要考虑左右,在DP里面就没有什么下了咯,但也至少除了考虑左右还要考虑上所以先枚举出在同一行满足条件的状态 即 某状态 若 s&(s#include #include #include #define N 11using namespace std;int dp[105][1<<N-3][1<<N-3];int A[105],m,n,calc[1<<N],num,state[1<<N];void init(){ num=0; for (int i=0;i<(1<<m);i 阅读全文
posted @ 2014-03-17 21:22 KRisen 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 这个题目搁置了这么久,终于搞完了。给n个人分配n个课程,已经告诉了你n个人对哪几门感兴趣,问最多有多少种分配方式我刚开始都没找到这怎么还可以状态dp,哪来的状态转移,想用暴力DFS,果断TLE的妥妥的。后来给殷犇发了这个题目,他还说你刷个这水题还刷得这包子劲,这题目就是后一行的状态由前一行得到,枚举当前这一行分配的状态,如果可行,就从后面的状态加过来由于状态只是从上一行转移过来,所以可以用滚动数组,用p表示当前,则!p就为上一行的,每次结束再把p置反即可。#include #include #include #define ll long longusing namespace std;int 阅读全文
posted @ 2014-03-17 11:18 KRisen 阅读(233) 评论(0) 推荐(0) 编辑