Zeros and Ones UVA - 12063
程序员文章站
2022-03-11 20:12:05
...
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
typedef long long ll;
int N,K;
ll dp[65][2][65][110];
int bit[65];
/*
又是一道数位dp,还是很懵逼
1.核心:状态压缩--->难点:怎样压缩表示
2.思想:树形的dp
*/
ll dfs(int pos,int v,int limit,int num1,ll sum){
if(pos==-1){
if((num1==N/2)&&(sum==0)){
return 1;
}
return 0;
}
if(!limit&&dp[pos][v][num1][sum]!=-1){
return dp[pos][v][num1][sum];
}
ll ans=0;
int max_num=limit?bit[pos]:1;
rep(i,0,max_num+1){
if(!i)
ans+=dfs(pos-1,0,limit&&i==max_num,num1,(sum*2)%K);
else
ans+=dfs(pos-1,1,limit&&i==max_num,num1+1,(sum*2+1)%K);
}
if(!limit)dp[pos][v][num1][sum]=ans;
return ans;
}
ll solve(int n){
memset(dp,-1,sizeof(dp));
rep(i,0,n)bit[i]=1;
return dfs(n-2,1,1,1,1ll);
}
int main(){
int T;
scanf("%d",&T);
rep(kase,1,T+1){
scanf("%d %d",&N,&K);
if(N&1||!K){
printf("Case %d: 0\n",kase);
continue;
}
printf("Case %d: %lld\n",kase,solve(N));
}
return 0;
}
推荐阅读
-
python 中的np.zeros()和np.ones()函数
-
UVA 12063 Zeros and ones 一道需要好好体会的好题
-
A. Case of the Zeros and Ones
-
[LeetCode] 二维背包问题 Ones and zeros 另含两种一维背包问题
-
NumPy(1)简介,基础属性,数组创建(ones,zeros,empty,arange,linespace)
-
UVA 12063 Zeros and ones 一道需要好好体会的好题
-
【原创】python基础--numpy库 zeros() ones()详解
-
【Tensorflow中创建张量的方法合集】zeros,ones,fill,constant,truncated_nomal,random_nomal,Variable,placeholder等
-
opencv学习-003-图像Mat类型对象的拷贝、赋值和创建(.clone(),.copyTo(),Mat::zeros,Mat::ones)
-
python 中的np.zeros()和np.ones()函数