CF327E Axis Walking HQG的博客
给一个序列,可以任意重排,但是前缀和不能出现给定数字中的数,问有几种排列方式
n<=24,这样的数量级不是搜索就是状压。明显这道题目是状压。
dp[i]表示选的状态为i的方案数
这题主要练习通过lowbit优化的dp
#include
using namespace std ;
const int p = 1e9+7;
const int M = (1<<25) ;
int lowbit(int x){return x&-x;}
int sum[M],a[25],no[3],dp[M] ;
int n,k ;
int main(){scanf("%d",&n) ;for (int i=0;iscanf("%d",&a[i]) ;sum[1<scanf("%d",&k) ;for (int i=0;iscanf("%d",&no[i]) ;dp[0]=1 ;for (int i=1;i<(1<if (sum[i]==no[0] || sum[i]==no[1]) continue ;for (int j=i;j!=0;j-=lowbit(j))dp[i]=(dp[i]+dp[i&~lowbit(j)])%p ;}printf("%d\n",dp[(1<1]) ;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
