FZU2126:消除类游戏(DP)

FZU2126:消除类游戏(DP)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Problem Description

S近期在玩一种游戏。

这样的游戏的规则是一个一个地往一个栈里放有颜色的球,当栈顶连续k个球颜色同样时。这k个球立马同一时候消失。

如今S已经往栈里放了n个球,他想知道再放m个球,然后使得栈里的球都被消去的放法有多少种。两种放法不同是指存在放的第i个球这两种放法放的球的颜色不同。因为方法数可能非常多,将答案mod 1000000007。

FZU2126:消除类游戏(DP) Input

输入包括多组数据。输入数据的第一行为四个整数n,m,h,k(0<=n,m,h<=1000,2<=k<=1000),表示已经放了n个球,有h种不同颜色的球,若栈顶出现连续k个球颜色同样则这k个球同一时候消失,问再放m个球。使得最后栈里的球都被消去的放法数。

第二行从左往右依次输入n个整数,范围为1到h,表示刚開始往栈里放的球的颜色,放入顺序与输入顺序同样,数据保证已经放入的n个球不会存在连续k个球颜色同样。答案对1000000007取余。

FZU2126:消除类游戏(DP) Output

输出一行一个整数M,表示对1000000007取余后的放法数。

FZU2126:消除类游戏(DP) Sample Input

3 6 3 3 1 2 20 6 2 3

FZU2126:消除类游戏(DP) Sample Output

98

dp[i][j]代表还须要放i个球,还有j个球须要消去的情况

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int mod = 1000000007;
int n,m,h,k;
int cur,pre,tot;
long long dp[1005][1005];
int main()
{
    int i,j;
    while(~scanf("%d%d%d%d",&n,&m,&h,&k))
    {
        memset(dp,0,sizeof(dp));
        pre = cur = tot = 0;
        for(i = 0; i<n; i++)
        {
            scanf("%d",&cur);
            if(cur != pre)//不等于前面,还须要k-1个球才干消去
                tot+=k-1;
            else//来一个相等的就减去1
                tot--;
            pre = cur;
        }
        dp[m][tot] = 1;//直接按如今所存在的数字消去的方法仅仅有一种
        for(i = m; i>0; i--)
        {
            for(j = i; j>=0; j--)
            {
                if(i-1>=j+k-1)//假设末尾放一个与栈末尾的求不同的球,那么对应的情况要多加k-1个球
                    dp[i-1][j+k-1] = (dp[i-1][j+k-1]+dp[i][j]*(j?(h-1):h))%mod;
                if(j-1<0)
                    break;
                dp[i-1][j-1] = (dp[i-1][j-1]+dp[i][j])%mod;//依据前面能够知道,我在末尾放一个与栈尾同样的球,那么我还须要放的个数必定是减去1的
            }
        }
        printf("%lld\n",dp[0][0]);
    }

    return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117257.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月8日 下午4:00
下一篇 2022年1月8日 下午5:00


相关推荐

  • cnn-lstm网络处理时序(卷积的应用)

    本文回顾了ShaojieBai、J.ZicoKolter和VladlenKoltun撰写的论文:AnEmpiricalEvaluationofGenericConvolutionalandRecurrentNetworksforSequenceModeling。在TCN之前,我们经常将LSTM和GRU等RNN关联到新的序列建模任务中。然而,论文表明TCN(时间卷积网络)可以有效地处理序列建模任务,甚至优于其他模型。作者还证明了TCN比LST

    2022年4月13日
    321
  • 【原创】无锁编程技术及实现

    【原创】无锁编程技术及实现无锁编程技术及实现作者:jx(360电商技术组) 1.基于锁的编程的缺点 多线程编程是多CPU系统在中应用最广泛的一种编程方式,在传统的多线程编程中,多线程之间一般用各种锁的机制来保证正确的对共享资源(share resources)进行访问和操作。在多线程编程中只要需要共享某些数据,就应当将对它的访问串行化。比如像++count(count是整型变量)这样的简单操作也得加锁,因为即便是增量操作

    2022年5月1日
    34
  • 如何使用staruml创建时序图[通俗易懂]

    说明:staruml版本:5.0.2.15701、打开staruml2、添加模型,右键Untitled=&gt;add=&gt;model=&gt;取名myuml(可以随意取)3、添加图表,右键myuml=&gt;AddDiagram=&gt;SequenceDiagram4、重命名图表5、添加参与者actor,右键myuml=&gt;add=&gt…

    2022年4月12日
    73
  • origin如何在柱状图上面显示数据_origin柱状图横坐标自定义

    origin如何在柱状图上面显示数据_origin柱状图横坐标自定义经验:Origin做柱状图常遇问题/柱状图X坐标轴如何设置—小技巧对于每个搞科研的人来说,origin这个作图软件是必不可少的!但是,对于新手来说(我也算是半个新手*^__^*),它有时候显得有点高深,不知道该如何设置。就拿这次来说吧,同门要画一个性能随含量变化的柱状图(希望大体效果希望如上图,上图还没完全设置好),但是不知道该如何设置X坐标轴,因为含量的变化区间不是固定的,例如10%,20%,4…

    2022年9月30日
    6
  • 秋招面试题系列- – -Java 工程师(一)

    秋招面试题系列- – -Java 工程师(一)内容涵盖 Java MyBatis ZooKeeper Dubbo Elasticsearc Memcached Linux 等技术栈

    2026年3月17日
    2
  • 最新Coze(扣子)智能体工作流:3分钟自动生成专业数据可视化图表,零基础搞定!

    最新Coze(扣子)智能体工作流:3分钟自动生成专业数据可视化图表,零基础搞定!

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号