zoukankan      html  css  js  c++  java
  • 校赛题目

    【原题链接】

    【题意说明】

    从现有的题目中选择N个从1~N不同难度系数的题目,每个题目分配难度系数,但有些题目的难度不好分配,给这种题目每个分配2个连续的数作为难度系数,在取题时可以任意选择一个难度系数。

    问题:给定不同难度系数的若干个题目,输出不同的方案种数C,因为C可能很大,因此只要输出C关于1000000007的余数。

    【问题分析】

    很显然,若是每个题目只有一个难度系数,此题就变得简单了!问题是有些题目的难度系数有两种!

    例如:

    N=4
      a[4]={3,3,3,3}
      b[3]={3,2,1}

    首先令c[i]为不包括b[i-1]难度的方案总数,d[i]为包括b[i]难度的方案总数;

    现在,我们从后往前看,对于最后一个难度c[4]=a[4];d[4]=a[4]+b[3];

    然后再看倒数两个难度的,c[3]=c[4]*(a[3]+b[3])+a[3]*d[4]+b[3]*(b[3]-1])/2;

    d[3]=c[3]+d[4]*b[2]; 

    再看倒数三个难度的,c[2]=c[3]*(a[2]+b[2])+a[2]*d[3]+b[2]*(b[2]-1)/2;

    d[2]=c[2]+d[3]*b[1];

    最后看全部难度的,c[1]=c[2]*(a[1]+b[1])+a[1]*d[2]+b[1]*(b[1]-1)/2;

    d[2]=c[1]+d[2]*b[0]; (注:b[0]=0)

    由此可以看出,要计算出当前的d[i],只需要记录上一层的c[i+1]与d[i+1]即可。

    这样我们就可以利用三个变量来计算即可!

     

  • 相关阅读:
    功能强大的T4文本模版
    C#中.snk文件的作用
    ASP.NET MVC中实现多个按钮提交的几种方法
    asp.net mvc强大的分页控件MvcPager
    设计模式—观察者模式
    Http响应码

    编码习惯
    vim 快捷键 转
    makefilevvhttp://www.tudou.com/programs/view/e3Z8RbxFIZE/
  • 原文地址:https://www.cnblogs.com/ahmasoi/p/2782723.html
Copyright © 2011-2022 走看看