1. 程式人生 > 實用技巧 >魔術棋子(記憶化搜尋)

魔術棋子(記憶化搜尋)

#include<iostream>
using namespace std;
int n,m,k,ans;
int map[110][110];
int vis[110][110][110];
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>map[i][j];
        }
    }
    vis[1][1][map[1][1]%k]=1
; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int x=0;x<k;x++) { if(vis[i-1][j][x]!=0) { vis[i][j][x*map[i][j]%k]=1; } if(vis[i][j-1][x]!=0) { vis[i][j][x
*map[i][j]%k]=1; } } } } for(int i=0;i<k;i++) { if(vis[n][m][i]!=0) { ans++; } } cout<<ans<<endl; for(int i=0;i<k;i++) { if(vis[n][m][i]!=0) { cout<<i<<"
"; } } return 0; }