这题是一个背包问题 这样的 在一个k子树上 每个节点都有自己的k个孩子 然后 从原点走 走到 某个点的 和为 N 且每条的 长度不小于D 就暂停问这样的 路有多少条,  呵呵 想到了 这样做没有把他敲出来,可以很清楚的 到达第几层都能到达那些状态 然后 最多N层看看每层取到什么样的值 然后先算出没有任何限制 的路有多少条 接着用权值小于D的路径做看能够搞多少条 然后相减一下就好了

#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
const int MOD =;
int dp[][],N,M,D;
int main(){ while(scanf("%d%d%d",&N,&M,&D) == ){
memset(dp,,sizeof(dp));
int ans = , dec = , t=;
dp[][] = ;
for( int i = ; i <= N ; i++){ t=t^;
memset(dp[t],,sizeof(dp[t]));
for( int j = ;j <=M ; ++ j )
for( int k = j ; k <= N ; k ++ ){
dp[t][k] = (dp[t][k]+dp[^t][k-j])%MOD;
}
ans=(ans+dp[t][N])%MOD;
}
t = ;
memset(dp,,sizeof(dp));
dp[][]=;
for(int i= ;i <= N ; ++ i){ t= t^;
memset(dp[t],,sizeof(dp[t]));
for( int j = ; j < D ; j ++)
for( int k=j ; k <=N ; k++)
dp[t][k]=(dp[t][k]+dp[t^][k-j])%MOD;
dec=(dec+dp[t][N])%MOD; }
printf("%d\n",(ans-dec+MOD)%MOD);
}
return ;
}

D 这题说的是 找出 n 使得 在n+1 n+2 。。。n*2 的所有的 数中 准确的找出 有m个 数具有准确的 k个1(在二进制当中) 事先得证明这样的一点就是 n + 2 ... 2·(n + 1) at least counts of such numbers on segment n + 1 ... 2·n 是正确的 因为这样如果一个数 可以通过排列组合证明 越大的 n的 k个1的个数都是大于等于小于n的数,我们可以猜猜这个是怎么来的,这样如果形成了一个数n 那么从0 到n当中的k个1 的个数小于等于 从0 到 n + 1 然后 同样的 n * 2 得到的个数小于等于 ( n + 1 ) * 2  那就要算 F[n*2] -F[n] < F[(n+1)*2] -F[n+1];  可以通过组合去计算大小 也可以 这样 想 后者的区间在不断的 夸大  他所能到达的个数比前一个区间来的大 

#include <string.h>
#include <cstdio>
#include <iostream>
using namespace std;
const int maxn = ;
const __int64 inf=2000000000000000000LL;
#define bit(mask,i)((mask>>i)&1)
int count( __int64 num){
int ans = ;
for( ; num ; num=num&(num-))
ans ++;
return ans;
}
__int64 dp[maxn][maxn] ,m;
__int64 solve(__int64 X,int num){
__int64 ans = num==count(X);
for( int i= ; i >= && num>= ; i--)
if(bit(X,i)) ans+=dp[i][num--];
return ans;
}
int main(){
int k;
memset(dp,,sizeof(dp));
dp[][]=;
for( int i = ; i<= ; ++ i )
for( int j = ; j <= i ; ++ j )
dp[i][j]=dp[i-][j]+(j?dp[i-][j-]:);
scanf("%I64d%d",&m,&k);
__int64 L= ,R=inf/ ,mid ;
while(L<R){
mid = L + (R-L)/;
if(solve(mid*,k)-solve(mid,k)<m ) L = mid+;
else R=mid;
}
printf("%I64d\n",L); return ;
}

Codeforces Round #247 (Div. 2) C D的更多相关文章

  1. Codeforces Round #247 (Div. 2) ABC

    Codeforces Round #247 (Div. 2) http://codeforces.com/contest/431  代码均已投放:https://github.com/illuz/Wa ...

  2. Codeforces Round #247 (Div. 2) B - Shower Line

    模拟即可 #include <iostream> #include <vector> #include <algorithm> using namespace st ...

  3. Codeforces Round #247 (Div. 2)

    A.水题. 遍历字符串对所给的对应数字求和即可. B.简单题. 对5个编号全排列,然后计算每种情况的高兴度,取最大值. C.dp. 设dp[n][is]表示对于k-trees边和等于n时,如果is== ...

  4. Codeforces Round #247 (Div. 2) C题

    赛后想了想,然后就过了.. 赛后....... 我真的很弱啊!想那么多干嘛? 明明知道这题的原型就是求求排列数,这不就是 (F[N]-B[N]+100000007)%100000007: F[N]是1 ...

  5. Codeforces Round #247 (Div. 2) C. k-Tree (dp)

    题目链接 自己的dp, 不是很好,这道dp题是 完全自己做出来的,完全没看题解,还是有点进步,虽然这个dp题比较简单. 题意:一个k叉树, 每一个对应权值1-k, 问最后相加权值为n, 且最大值至少为 ...

  6. [Codeforces Round #247 (Div. 2)] A. Black Square

    A. Black Square time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. Codeforces Round #247 (Div. 2) D. Random Task

    D. Random Task time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)

    题意与分析(Codeforces-431C) 题意是这样的:给出K-Tree--一个无限增长的树,它的每个结点都恰有\(K\)个孩子,每个节点到它\(K\)个孩子的\(K\)条边的权重各为\(1,2, ...

  9. Codeforces Round #247 (Div. 2) B

    B. Shower Line time limit per test 1 second memory limit per test 256 megabytes input standard input ...

随机推荐

  1. Python基础二

    1.for循环后接else __author__ = "zhou" age_of_oldboy = 56 for i in range(3): guess_age = int(in ...

  2. 关于raid的理解

    缘起 公司部署业务的时候,6块盘需要做raid,以前还没有用过所以不知道,临时才去百度看了一下相关知识. 部署 当前可以用软raid与硬raid,软raid系统上建立,占用CPU与IO资源;硬RAID ...

  3. MVC中用ajax提交json对象数组

    应用场景:在前端用ajax向服务器提交json对象数组,在controller的以对象数组作为函数的参数,提交的json数组直接转为服务器端的对象数组. 如: 要将json对象数组[{Id:1,Nam ...

  4. C#采用OpenXml给word里面插入图片

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  5. 考勤输入导入OA平台与考勤统计报表导出功能源代码

    注:以某某公司为例,每日签到时间为8点整   每日签退时间为17点30分 规则:公司签到签退时间在OA平台中可以视实际情况调整,当天有请假并通过工作流审批通过为有效,当天因公外出并通过工作流审批通过为 ...

  6. Java连接数据库之MySQL

    工具: eclipse MySQL Navicat for MySQL MySQL 连接驱动:mysql-connector-java-5.0.4-bin.jar SQL 代码 CREATE TABL ...

  7. 随手心得(浅谈iOS)

    前一段时间去一个公司面试,面试官问我关于iOS的ARC,当然ARC对于一般有经验的iOS程序员来说一般不是什么问题,但是他问我苹果是怎么实现的,我就说通过地址指针解决的,然后他问我那苹果指针指向地址是 ...

  8. CentOs6.7 python2.6升级到2.7.11

    1.查看当前python的版本 #python -V Python 2.6.6 2.下载Python-2.7.11 wget https://www.python.org/ftp/python/2.7 ...

  9. 传智播客.NET视频学习课件

    传智播客.NET视频学习课件访问.NET网站了解更多课程详情http://net.itcast.cn(小提示:为什么本书中超链接打不开?)此套课件是伴随 传智播客.net实况教学视频 (小提示:为什么 ...

  10. Easyui Datagrid相同连续列合并扩展(三)

    function MergeCells(seletor, rows, fields) { if(rows == null || rows.length == 0 || fields == null | ...