数位dp 3943 二分法
转载:http://blog.csdn.net/wdcjdtc/article/details/39177905
#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
using namespace std;
__int64 dp[22][22][22]; //i位含有j个4 k个7 的有多少个
int num[22];
__int64 dfs(int site,int a,int b,int f,int x,int y)
{
if(site==0)
{
if(a==x&&b==y) return 1;
return 0;
}
if(!f&&dp[site][a][b]!=-1) return dp[site][a][b];
int len=f?num[site]:9;
__int64 ans=0;
for(int i=0;i<=len;i++)
{
if(i==4) ans+=dfs(site-1,a+1,b,f&&i==len,x,y);
else if(i==7) ans+=dfs(site-1,a,b+1,f&&i==len,x,y);
else ans+=dfs(site-1,a,b,f&&i==len,x,y);
}
if(!f) dp[site][a][b]=ans;
return ans;
}
__int64 solve(__int64 a,int x,int y)
{
int cnt=0;
while(a)
{
num[++cnt]=a%10;
a/=10;
}
return dfs(cnt,0,0,1,x,y);
}
int main()
{
int t,cas=1;
cin>>t;
while(t--)
{
__int64 p,q;
int x,y;
scanf("%I64d%I64d%d%d",&p,&q,&x,&y);
memset(dp,-1,sizeof(dp));
int n;
scanf("%d",&n);
printf("Case #%d:\n",cas++);
while(n--)
{
__int64 k,s;
__int64 ans=-1;
s=solve(p,x,y);
scanf("%I64d",&k);
s+=k;
__int64 l=p+1,r=q;
while(l<=r) //利用个数进行二分来确定第几个,最小满足的那个数就是第几个
{
__int64 mid=(l+r)/2;
if(solve(mid,x,y)>=s)
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
if(ans!=-1) printf("%I64d\n",ans);
else puts("Nya!");
}
}
return 0;
}
数位dp 3943 二分法的更多相关文章
- hdu 3943 经典数位dp好题
/* 题意:求出p-q的第j个nya数 数位dp,求出p-q的所有nya数的个数很好求,但是询问求出最终那个第j个值时是我不会求了看了下别人的思路 具体就是把p-q的第j个转化成0-q的第low+j个 ...
- hdu 4352 XHXJ's LIS 数位DP+最长上升子序列
题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
随机推荐
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
文章大纲 一.课程介绍二.今日内容介绍三.参考资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合.后台 ...
- 详解Android Activity生命周期
转载注明来自: http://www.cnblogs.com/wujiancheng/ 一.正常情况下Activity的生命周期: Activity的生命周期大概可以归为三部分 整个的生命周期:o ...
- Jquery+ashx实现Ajax
一 Ajax的实现方式 1.使用一般的webform,在页面用jQuery ajax调用,再从取得的html数据中取得<body>内的内容,写入DOM 优点:不用改变现有的asp.net开 ...
- 忘记dba用户密码,利用SQLPlus重置dba密码
打开SQL Plus 输入用户名: sys as sysdba 输入口令:可直接回车 连接到: Oracle Database 11g Enterprise Edition Release 11.2. ...
- Farseer.net轻量级ORM开源框架 V1.2版本升级消息
V1.1到V1.2的更新,重构了很多类及方法,其中主要做了性能优化(取消所有反射,使用表达式树+缓存).解耦了SQL生成层(没有实体.队列的依赖,所有数据均通过表达式树传递解析) 先上内部更新历史记录 ...
- raw cannot be resolved or is not a field解决办法
解决raw文件夹问题 查看左侧项目/res文件夹下是否有raw文件夹,(一定是放到res文件夹下,raw在项目开始创建时候不会自动创建,所以要自己创建)
- WebAPI中Area的使用
很简单,创建area后,添加一下代码到AreaRegistration中即可 context.Routes.MapHttpRoute( name: "api_default", r ...
- 怎样在nexus 中 搜索到远程maven仓库中的jar 文件
怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...
- 手动配置webpack
//注:“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录.const path = require('path');const webpack = require( ...
- java_线程分类
线程分为守护线程和用户线程,如java虚拟机的回收机制就是守护线程,线程开始运行它就启动,线程结束它就结束 用户线程变守护线程:Thread(线程).setDaemon(true)