hdu2045 涂色问题

来源:互联网 发布:网络唤醒电脑开机 编辑:程序博客网 时间:2024/06/10 07:36

ac代码如下

对于dp问题,先找到问题之中变量在哪里,然后定义几维数组,再初始化数组,然后循环 得到最终的答案。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int dp[3][3][52];
int main()
{
        int n;
        while(~scanf("%d",&n))
        {
                                memset(dp,0,sizeof(dp));
                dp[0][0][1]=1;
                dp[1][1][1]=1;
                dp[2][2][1]=1;
                int i;
                if(n==1) printf("3\n");
                else
                {
                        for(i=2;i<=n;i++)
                        {
                                dp[0][0][i]=dp[0][1][i-1]+dp[0][2][i-1];//三维   表示  初始颜色  此元素颜色  此元素的序号
                                dp[0][1][i]=dp[0][0][i-1]+dp[0][2][i-1];
                                dp[0][2][i]=dp[0][0][i-1]+dp[0][1][i-1];

                                dp[1][0][i]=dp[1][1][i-1]+dp[1][2][i-1];
                                dp[1][1][i]=dp[1][0][i-1]+dp[1][2][i-1];
                                dp[1][2][i]=dp[1][0][i-1]+dp[1][1][i-1];

                                dp[2][0][i]=dp[2][1][i-1]+dp[2][2][i-1];
                                dp[2][1][i]=dp[2][0][i-1]+dp[2][2][i-1];
                                dp[2][2][i]=dp[2][0][i-1]+dp[2][1][i-1];
                        }
                printf("%d\n",dp[0][1][n]+dp[0][2][n]+dp[1][0][n]+dp[1][2][n]+dp[2][0][n]+dp[2][1][n]);
                }
        }
        return 0;
}
0 0