ZCMU-1033
我觉得这位大佬说的已经很好了,可以直接看她的思路了;
大佬思路
但是她的代码没有考虑到1 1 1 1的情况,
代码思路
这个是可以的很长且没有注释;
#include<bits/stdc++.h>
using namespace std;
long long d[40][40];
long long c[40][40];
long long a[40];
long long x,y;
int k,b;
long long makedp(int i,int j,long long sub){
//该函数表示从i个位置当中选j个位置赋值为1且小于等于sub;
if(i==0){
if(j==0&&sub==0){
return 1;
}
else return 0;
}
if(i<j){//不够要求
return 0;
}
if(sub==0){
if(j==0){
return 1;//找0位
}
else{
return 0;
}
}
else if(sub>=d[i][j]){
//这里很好的避免了重复;
return c[i][j];//最大,就找小于他的最多
}
long long sum=0;
sum+=makedp(i-1,j,sub);//取消最高位太大减小
sum+=makedp(i-1,j-1,sub-a[i]);//在保证最高位在的情况
return sum;
}
void init(){
memset(a,0,sizeof(a));
memset(d,0,sizeof(d));
long long t=1;
a[1]=t;
for(int i=2;i<=32;i++){
t=t*b;
if(t>y){
break;
}
a[i]=t;//a数组表示的是b^(i-1);
}
d[1][1]=1;
for(int i=2;i<=32;i++){
if(a[i]==0){
break;
}
for(int j=1;j<=i;j++){
//d=b^(i-1)+b^(i-2)+..有j个元素
d[i][j]=d[i][j-1]+a[i-j+1];
}
}
}
int main(){
for(int i=0;i<=32;i++){
c[i][0]=1;
}
//这里表示的是组合数,
//从i位数中取出j个来。
for(int i=1;i<=32;i++){
for(int j=1;j<=i;j++){
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
}
while(~scanf("%lld%lld%d%d",&x,&y,&k,&b)){
init();
int u;
for(int i=1;i<=32;++i){
//找到不超过y的b^(i-1)
if(a[i]>y){
u=i-1;//所以减一
break;
}
else if(a[i]==0){
u=i-1;
break;
}
}
long long t1=makedp(u,k,y);
for(int i=1;i<=32;++i){
if(a[i]>x-1){
u=i-1;
break;
}
else if(a[i]==0){
u=i-1;//超出2
break;
}
}
long long t2=makedp(u,k,x-1);
//适用减法行为
cout<<t1-t2<<endl;
}
return 0;
}
ZCMU-1033的更多相关文章
- 【hihoCoder】1033: 交错和
初探数位dp 介绍了数位类统计的基础知识.以下列出其中的基础点: 基本问题 统计在区间[l, r]中满足条件的数的个数 思路 1. [l, r] 将问题转换为 在[0, r]中满足条件的个数 - 在[ ...
- 为什么Visual Studio的安装目录下有名为1033或2052的文件夹?
一直不清楚MS诸多产品的安装目录下为什么总有个名为1033或者2052的目录 搜索一下才知道,原来叫 LCID(Locale ID,区域性标识符) 常见的如:1033表示英语(美国),2052表示中文 ...
- PAT乙级 1033. 旧键盘打字(20)
1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...
- 【wikioi】1033 蚯蚓的游戏问题(费用流)
http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每 ...
- PAT-乙级-1033. 旧键盘打字(20)
1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...
- PAT 1033. To Fill or Not to Fill (25)
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1033 此题是一道贪心算法题,难度较大,关键在于贪心策略的选择: #include <cs ...
- 阿里云服务器(Win 2008 R2 Standard)安装MSSM 2008 R2之1033和2052问题
最近在给租用的阿里云服务器安装Sql Server 2008 R2 Express时,遭遇下面的问题.经过几番折腾后,终于解决问题,完成安装,这里总结分享我的解决方法,希望能给遇到相同问题的小伙伴们节 ...
- lightoj 1033 区间dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1033 #include <cstdio> #include <cst ...
- BZOJ 1033 杀蚂蚁
Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的任 ...
- [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
题目链接: BZOJ - 1033 题目分析 模拟!纯粹按照题目描述模拟! 这是一道喜闻乐见的经典模拟题! 我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱 ...
随机推荐
- C++面试题整理 2
8. C++11新特性又哪些 自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针null ...
- SuperMap iServer8C证书过期如何解决
说明:该问题是SuperMap iServer8.0.2和8.1.0版本云许可模块问题,需要手动更新云许可HTTPS证书,可以升级到官网8.1.1/9D/10i等方式进行解决 针对无法升级或者老项目维 ...
- Python技术书示例代码相关内容
二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链接 用Edge/Chrome浏览器下载. <Python自动化运维快速入门> ...
- 「模拟赛」A 层多校联训 4(卖品:CTH)
双倒一啦! 感觉这次最大的错误就是没看 T2.(本质原因还是时间浪费的太多了) 赛时记录在闲话啦 accoder 多校比赛链接 02 表示法 唐诗题!考高精的人都\(**\),输出深度优先搜索解决.高 ...
- .NET 白板书写预测-曲线拟合
白板软件书写速度是其最核心的功能,注册StylusPlugin从触摸线程拿触摸点数据并在另一UI线程绘制渲染是比较稳妥的方案,具体的可以查看小伙伴德熙的2019-1-28-WPF-高性能笔 - lin ...
- Android复习(三)清单文件中的元素——>action、activity-alias、category、compatible-screens、data
<action> 语法: <action android:name="string" /> 包含于: <intent-filter> 说明: ...
- C#轻松实现Modbus通信
1.前言 大家好!我是付工.前面给大家介绍了一系列关于RS485与Modbus的知识. 终于有人把RS485说清楚了终于有人把Modbus说明白了通透!终于把ModbusRTU弄明白了这样看来,Mod ...
- 浅析Redis
浅析Redis 什么是Redis Redis本质上是一个Key-Value类型的内存数据库,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存. 因为是纯内存操作 ...
- 多校A层冲刺NOIP2024模拟赛05
T1.好数(number) 签到题 把选三个数相加拆为选择一个数,然后看前面有没有能用两个数组合出答案. $ O(n^2) $ . 码( #include<bits/stdc++.h> u ...
- Cut the Sequence(单调队列DP+set)
题面 大意:一段长度为n的序列,分成若干段,每段值的总和不能超过m,求各段中最大值加起来的最小值. 其实最朴素的DP还是很好想的,以f[i]表示i及i以前已经分好所需的最小值,a[i]表示i点的值,那 ...