【sgu390】数位dp
这题其实就是不断地合并子树,跟前面例一的思想是一样的。
这个打法我觉得非常优美啊(学别人的),为什么要搞lim1和lim2呢?
是因为在区间lim1~lim2之外的都是没有用的,但是我们f[h][sum][rem]里存的是一棵完整的h层的树,所以被lim1和lim2限制的就不存进去了。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
const LL N=;
LL l,r,K;
struct node{
LL a,b;
bool bk;
node()
{
bk=;a=;b=;
}
}f[][N][N];
LL dl[],dr[]; void mercy(node &x,node y){x.a+=y.a;x.b=y.b;} node dp(LL h,LL sum,LL rem,LL lim1,LL lim2)
{
node ans;
ans.a=;ans.b=rem;
if(f[h][sum][rem].bk && !lim1 && !lim2) return f[h][sum][rem];
if(h==)
{
if(sum+rem>=K) ans.a=,ans.b=;
else ans.a=,ans.b=sum+rem;
}
else
{
LL x=lim1 ? dl[h] : ;
LL y=lim2 ? dr[h] : ;
for(LL i=x;i<=y;i++)
{
mercy(ans,dp(h-,sum+i,ans.b,(lim1&(i==x)),(lim2&(i==y))));
}
}
if(!lim1 && !lim2) f[h][sum][rem]=ans,f[h][sum][rem].bk=;
return ans;
} int main()
{
freopen("a.in","r",stdin);
freopen("me.out","w",stdout);
scanf("%lld%lld%lld",&l,&r,&K);
LL x;
memset(dl,,sizeof(dl));
memset(dr,,sizeof(dr));
x=;while(l) {dl[++x]=l%;l/=;}
x=;while(r) {dr[++x]=r%;r/=;}
printf("%lld\n",dp(,,,,).a);
return ;
}
【sgu390】数位dp的更多相关文章
- 【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 ...
- 数位DP之奥义
恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...
- 浅谈数位DP
在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...
- 数位DP
题意:(hdu 4734) 我们定义十进制数x的权值为f(x) = a(n)*2^(n-1)+a(n-1)*2(n-2)+...a(2)*2+a(1)*1,a(i)表示十进制数x中第i位的数字. 题目 ...
随机推荐
- SSM框架学习思维导图
SSM框架学习思维导图 2017年08月11日 20:17:28 阅读数:1141 放上前段时间学习SSM框架以及Spring.SpringMVC.MyBatis的学习结果,输出思维导图一共四幅图.这 ...
- 【MVC】 小问题
[MVC] 小问题 1. url 传参中文乱码 : encodeURIComponent 转码 2. RedirectToAction 重定向 : ajax 调用无效, 直接 url 访问有效 3. ...
- react错误总结
react-native 错误总结 The development server returned response error code: 500 in react-native https://b ...
- PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0
代码在本地运行一切都OK,放到服务器上,网站访问正常,上传就出现该错误. 提示:PHP Warning: File upload error - unable to create a temporar ...
- KMP板子+Trie板子
KMP算法是一个字符串匹配算法,最直白的用法就是在一个长度为n的字符串T中查找另一个长度为m字符串P的匹配(总之就是用于文本中进行单个字符串的匹配). 对于这个问题,暴力算法是很好做的,直接对于T的每 ...
- lubuntu 使用USB摄像头
http://liangbing8612.blog.51cto.com/2633208/598762 Most of the camera driver has integrated in the k ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- vs2017切换设计、拆分假死的解决
今天安装了vs2017版把vs2015卸载了,原因就是vs2015运行webform后ajaxpro总是会出现time out现象.太难受了,所以决定体验一下新版本. 安装了vs2017后ajaxpr ...
- 201621044079 week05-继承、多态、抽象类与接口
作业05-继承.多态.抽象类与接口 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 interface关键字 implements has-a;comparable co ...
- 【EasyNetQ】- 基于topic的路由
RabbitMQ具有非常酷的功能,基于主题的路由,允许订户根据多个标准过滤消息.主题是由与消息一起发布的点分隔的单词列表.例如,“stock.usd.nyse”或“book.uk.london”或“a ...