[数字dp] hdu 3271 SNIBB
意甲冠军:有两个查询:
q=1。在[x,y]间隔,兑换b十进制,数字和m多少个月。
q=2。在[x,y]间隔,兑换b十进制,数字是m第一k的数目是多少(十进制),没有输出由给定的主题。
思维:
和比特的平均数dp如,第几个数的话就是二分推断。
然后就是按常理要开4维,就是dp[i][sum][b][m] i位,和为sum,b进制,最后和为m
可是开不下,所以开3维每次初始化。
注意一下:
1、每次都要初始化
2、x不一定小于y
3、是[x,y]不是(x,y]
代码:
#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"stack"
#include"algorithm"
#include"iostream"
using namespace std;
__int64 dp[33][320][65],num[33]; // i位 和是sum 进制b 的关于m的答案 可是再替m开一维开不下。所以不能在外面初始化
__int64 dfs(__int64 site,__int64 sum,__int64 b,int f,__int64 m)
{
if(site==0) return sum==m?1:0;
if(!f&&dp[site][sum][b]!=-1) return dp[site][sum][b];
__int64 len=f? num[site]:b-1;
__int64 ans=0;
for(__int64 i=0; i<=len; i++)
{
ans+=dfs(site-1,sum+i,b,f&&i==len,m);
}
if(!f) dp[site][sum][b]=ans;
return ans;
}
__int64 solve(__int64 x,__int64 b,__int64 m)
{
int cnt=0;
if(x<0) return 0;
while(x)
{
num[++cnt]=x%b;
x/=b;
}
return dfs(cnt,0,b,1,m);
}
int main()
{
int cas=1;
int q;
while(scanf("%d",&q)!=-1)
{
__int64 x,y,b,m,k;
memset(dp,-1,sizeof(dp)); //必须放里面
printf("Case %d:\n",cas++);
if(q==1)
{
scanf("%I64d%I64d%I64d%I64d",&x,&y,&b,&m);
if(x>y) swap(x,y);
printf("%I64d\n",solve(y,b,m)-solve(x-1,b,m));
}
else
{
scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&b,&m,&k);
x--; //注意这里是求 [x,y]区间内的! if(x>y) swap(x,y);
__int64 ans=-1,s;
s=solve(x,b,m);
s+=k;
__int64 l=x+1,r=y;
while(l<=r)
{
__int64 mid=(l+r)/2;
if(solve(mid,b,m)>=s)
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
if(ans!=-1) printf("%I64d\n",ans);
else puts("Could not find the Number!");
}
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
[数字dp] hdu 3271 SNIBB的更多相关文章
- hdu 3271 SNIBB 数位DP+二分
思路:dp[i][j]:表示第i位在B进制下数字和. 用二分找第k个数! 代码如下: #include<iostream> #include<stdio.h> #include ...
- HDU 3271 SNIBB
SNIBB Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 3271 ...
- [数字dp] hdu 3565 Bi-peak Number
意甲冠军: 为了范围[X,Y],的最大位数的范围内的需求高峰和值多少. 双峰是为了满足一些规定数量 你可以切两 /\ /\ 形式. 思维: dp[site][cur][ok] site地点 面的数 ...
- HDU - 4734 F(x) (2013成都网络游戏,数字DP)
意甲冠军:求0-B见面<=F[A]所有可能的 思维:数字DP,内存搜索 #include <iostream> #include <cstring> #include & ...
- fwt优化+树形DP HDU 5909
//fwt优化+树形DP HDU 5909 //见官方题解 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ #include <bits/ ...
- hdu 3652 B-number(数字dp)
http://acm.hdu.edu.cn/showproblem.php? pid=3652 大致题意:"B-number"即一个整数含有子串"13"且被13 ...
- hdu 3709 数字dp(小思)
http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...
- HDU——B-number(数字DP)
标题效果: 要了解1至n如何号码之间有许多含有13,并13可分 记忆化搜索: dp[pos][pre][mod][statu],pos位数,pre前一位,mod余数,statu状态 有2个状态:含13 ...
- HDU 3271 数位dp+二分
SNIBB Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- (十四)RabbitMQ消息队列-启用SSL安全通讯
原文:(十四)RabbitMQ消息队列-启用SSL安全通讯 如果RabbitMQ服务在内网中,只有内网的应用连接,我们认为这些连接都是安全的,但是个别情况我们需要让RabbitMQ对外提供服务.这种情 ...
- 事件处理之一:两种方式:监听器与回调 分类: H1_ANDROID 2013-10-31 10:26 3250人阅读 评论(0) 收藏
Android组件的事件处理有2种方式: 1.基于监听器的事件处理方式:先定义组件,然后为组件设定监听器. 详见http://blog.csdn.net/jediael_lu/article/deta ...
- 高性能 Python —— vectorization
首先来看一段判断一个整数数是否为素数的函数,然后从计算机内部计算流程的角度对其进行分析: import math def check_prime(number): sqrt_number = math ...
- tplink-如何远程WEB管理路由器?
http://service.tp-link.com.cn/detail_article_185.html 如何远程WEB管理路由器? 新版tplink怎么远程Web管理? https://www.1 ...
- JavaScript实现form表单的多文件上传
form表单的多文件上传,具体内容如下 formData对象可以使用一系列的键值对来模拟一个完整的表单,然后使用Ajax来发送这个表单 使用<form>表单初始化FormData对象的方式 ...
- css选择器指定元素中第几个子元素
tr td:nth-child(2){ background-color:gray; } 就是tr当中的td的第二个td的属性 tr:nth-child(2n+0){ background-color ...
- CVE-2014-3566
https://access.redhat.com/articles/1232123 https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv ...
- js进阶 10-7 简单的伪类选择器可以干什么
js进阶 10-7 简单的伪类选择器可以干什么 一.总结 一句话总结:伪类选择器是冒号. 1.学而不用,有什么用? 多用啊,在项目中多用 2.简单的伪类选择器可以干什么? 除某元素以外,某元素的一切索 ...
- 百度消息推送REST API探究
一.百度云推送介绍 云推送(Push)是百度开放云向开发者提供的消息推送服务:通过利用云端与客户端之间建立稳定.可靠的长连接来为开发者提供向客户端应用推送实时消息服务. 百度云推送服务支持推送三种类型 ...
- 【codeforces 750C】New Year and Rating(做法2)
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...