记一类DP问题!

一个长条有M个格子,用n种颜色去图,每种颜色有k[i]个,   一共正好m个! 正好涂满M个格子,要求是相邻的格子颜色不能相同!

这类题可以看做一类组合DP问题,当初的想法挺简单就是这一个格子放那种颜色,得看他前面那种格子放什么颜色,这就用到了转移,就是DP! 这个题本来是省赛的E题有点相似,但又有不同,那个题没有数量这一个条件,而这里有需要使用数量限制,但是实际操作过程中,数量限制很难记录,或者说根本就没法记录! 因为这一个格子,你放置了某种颜色,但是这种颜色是从前面某种颜色中转化过来的,由那种颜色转化过来就导致了消耗的不确定性! 难以记录,而这个题用穷举的思路也想然不行,因为题目数据量显然不能用这个办法! 怎么办额?! 好像有更简单的算法……   借鉴 doma的指点,这个题的原型是腾讯马拉松的一个题:http://acm.hdu.edu.cn/showproblem.php?pid=4532     貌似URAL也有类似的题,到现在我好想还在纠结着用哪个错误的思路在敲呢!

下面是我三for前套的错误代码:

for(int i=1; i<m; ++i)
    {
        for(int j=1; j<=n; ++j)
        {
            for(int h=1; h<=n; ++h)
            {
                if(j!=h&&cnt[i][j]<k[j])
                {
                    dp[i][j]+=dp[i-1][h];
                    cnt[i-1][h]++;
                }
            }

        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值