这是为什么?(ws)
  • 板块灌水区
  • 楼主_farawaystar_
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/11/12 23:24
  • 上次更新2023/11/4 00:45:45
查看原帖
这是为什么?(ws)
370037
_farawaystar_楼主2021/11/12 23:24
#include<iostream>
using namespace std;
int n,k,num;
long long cnt[2000],ok[2000],ans,dp[10][100][2000]={1};
int main(){
    cin>>n>>k;
    for(int s=0;s<(1<<n);s++){
        int tot=0,s1=s;
        while(s1){
            if(s1&1)tot++;
            s1>>=1;
        }
        cnt[s]=tot;
        if(!(((s<<1)|(s>>1))&s))ok[++num]=s;
    }
    for(int i=1;i<=n;i++)
        for(int l=1;l<=num;l++){
            int s1=ok[l];             
            for(int r=1;r<=num;r++){
                int s2=ok[r];
                if(!((s2|(s2<<1)|(s2>>1))&s1)){    
                    for(int j=0;j<=k;j++)
	                    if(j-cnt[s1]>=0)dp[i][j][s1]+=dp[i-1][j-cnt[s1]][s2];
                }
            }
        }
    for(int i=1;i<=num;i++)ans+=dp[n][k][ok[i]];
	cout<<ans;
    return 0;
}

为什么这样会编译错误

(好像是那个dp数组初始化的问题)

2021/11/12 23:24
加载中...