注意dp数组要用longlong以避免超出范围,思路没什么错误,但是最后几个数据过不了
#include<iostream>
#include<cstring>
using namespace std;
const int MOD=1e9+7;
long long dp[7],temp[7];
bool cnt[10][10];
int check[7]={0,4,5,6,1,2,3};
int n,m;
int main(){
cin>>n>>m;
while(m--){
int a,b;
cin>>a>>b;
cnt[a][b]=true;
cnt[b][a]=true;
}
n--;
for(int i=1;i<=6;i++) dp[i]=4;
while(n--){
memset(temp,0,sizeof temp);
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++){
if(cnt[j][check[i]]) continue;
temp[i]+=(dp[j]%MOD);
temp[i]%=MOD;
}
temp[i]*=4;
temp[i]%=MOD;
}
for(int i=1;i<=6;i++){
dp[i]=temp[i];
}
}
int res=0;
for(int i=1;i<=6;i++){
res+=dp[i];
res%=MOD;
}
cout<<res;
}
# ssss