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 ...
随机推荐
- Windows Phone Bing lock screen doesn't change解决方法
之前一直用的Lumia 925,Bing lock screen每天都会更换.这几天换了Lumia 930,同步了账号相关的设置,发现Bing lock screen不再每天更换.尝试重启.使用cel ...
- github基本用法
本人github账号:https://github.com/pingfanren,喜欢的朋友可以给我点星. Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法. 一:下载G ...
- iOS - WKWebView那些坑
WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用.内存泄漏的 UIWebView.WKWebView 拥有60fps滚动刷新率. ...
- Xcode - LLDB调试技巧
LLDB是Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能.平时用Xcode运行程序,实际走的都是LLDB.熟练使用LLDB,可以让你debug事半功倍. ...
- [转][darkbaby]任天堂传——失落的泰坦王朝(上)
前言: 曾经一再的询问自我;是否真的完全了解任天堂这个游戏老铺的真实本质?或许从来就没有人能够了解,世间已经有太多的真相被埋没在谎言和臆测之中.作为 一个十多年游龄的老玩家,亲眼目睹了任天堂从如日 ...
- Query实例的ajax应用之二级联动的后台是采用php来做的
jQuery实例的ajax应用之二级联动的后台是采用php来做的,前台通过jquery的ajax方式实现二级联动数据库表设计 csj_trade id int(11) auto_increment ...
- Django数据库相关操作
首先,在settings.py中加入应用的名称,让数据库知道使用的是哪个应用,然后给那个应用创建表. 在settings.py中配置数据库相关参数,默认使用sqlite3不用配置 编辑models.p ...
- 最长上升子序列 OpenJ_Bailian - 2757 dp模板
第一种是用以前状态更新当前状态(人人为我) 第二种是用当前状态更新以后状态(我为人人) 都是n^2代码: 对于人人为我的更新方法,可以用数据结构储存“人人”对其进行线性\二分优化. ; int a[m ...
- javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...
- mysql 开启profiling
mysql 开启profiling