Codeforces Round #247 (Div. 2) C D
这题是一个背包问题 这样的 在一个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的更多相关文章
- Codeforces Round #247 (Div. 2) ABC
Codeforces Round #247 (Div. 2) http://codeforces.com/contest/431 代码均已投放:https://github.com/illuz/Wa ...
- Codeforces Round #247 (Div. 2) B - Shower Line
模拟即可 #include <iostream> #include <vector> #include <algorithm> using namespace st ...
- Codeforces Round #247 (Div. 2)
A.水题. 遍历字符串对所给的对应数字求和即可. B.简单题. 对5个编号全排列,然后计算每种情况的高兴度,取最大值. C.dp. 设dp[n][is]表示对于k-trees边和等于n时,如果is== ...
- Codeforces Round #247 (Div. 2) C题
赛后想了想,然后就过了.. 赛后....... 我真的很弱啊!想那么多干嘛? 明明知道这题的原型就是求求排列数,这不就是 (F[N]-B[N]+100000007)%100000007: F[N]是1 ...
- Codeforces Round #247 (Div. 2) C. k-Tree (dp)
题目链接 自己的dp, 不是很好,这道dp题是 完全自己做出来的,完全没看题解,还是有点进步,虽然这个dp题比较简单. 题意:一个k叉树, 每一个对应权值1-k, 问最后相加权值为n, 且最大值至少为 ...
- [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 ...
- 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 ...
- 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)
题意与分析(Codeforces-431C) 题意是这样的:给出K-Tree--一个无限增长的树,它的每个结点都恰有\(K\)个孩子,每个节点到它\(K\)个孩子的\(K\)条边的权重各为\(1,2, ...
- Codeforces Round #247 (Div. 2) B
B. Shower Line time limit per test 1 second memory limit per test 256 megabytes input standard input ...
随机推荐
- Bulk Convert DOC to DOCX
原文链接 :http://blogs.msdn.com/b/ericwhite/archive/2008/09/19/bulk-convert-doc-to-docx.aspx 帮助文档:http:/ ...
- 【CF718E】Matvey's Birthday BFS+动态规划
[CF718E]Matvey's Birthday 题意:给你一个长度为n的,由前8个小写字母组成的字符串s.构建一张n个点的无向图:点i和点j之间有一条长度为1的边当且仅当:|i-j|=1或$s_i ...
- yii---进行增删改查
我们使用yii进行数据的增删改查: 一.新增数据 使用model::save()操作进行新增数据 $user= new User; $user->username =$username; $us ...
- Zookeeper可以干什么
在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, n ...
- myeclipse bug
在.metadata上方就不在workspace里面,复制黏贴在下方才可以发布运行
- 专访|HPE测试中心总监徐盛:测试新思维-DevOps,持续测试,更敏捷,更快速
2016年7月22日,「HPE&msup软件技术开放日」将在上海浦东新区,张江高科技园区纳贤路799号科荣大厦小楼2楼举办,msup携手HPE揭秘全球测试中心背后的12条技术实践. 徐盛:HP ...
- 使用TensorFlow Serving优化TensorFlow模型
使用TensorFlow Serving优化TensorFlow模型 https://www.tensorflowers.cn/t/7464 https://mp.weixin.qq.com/s/qO ...
- python 时间字符串和时间戳之间的转换
https://blog.csdn.net/qq_37193537/article/details/78987949 1.将字符串的时间转换为时间戳 方法: a = " ...
- Balanced Lineup---poj3264线段树基础
题目链接 求对应区间最大值与最小值的差: #include<stdio.h> #include<string.h> #include<algorithm> #inc ...
- javaScript高级教程(七)正则表达式中括号三种常见作用
括号用来将子表达式标记起来,以区别于其他表达式 比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式: h(elp)? 字符h之后的elp可有可无这里 ...