当前位置:网站首页>Digital DP template
Digital DP template
2022-07-05 00:50:00 【Krito.】
Simply save a board , In order to avoid going through documents and websites everywhere in the future .
notes : Not to explain , For personal use only .
explain
choose P2602 [ZJOI2010] The problem of number counting AC Code as a template .
1.dp Of n Each dimension of the dimension group represents a certain current state , Take this question as an example ,dp[pos][sum][st] in ,pos Represents the current number ,sum Indicates the number of occurrences of a number in the higher-order digits of the current digit ,st Indicates whether there is a leading 0.
2.dfs Search the possible value of each digit and save the current state . Again , Take this question as an example ,pos Indicates the current digit ,pre Indicates the size of the previous digit ( This question seems useless ),st Indicates whether it is a leading 0,sum Indicates the number of occurrences of a certain number so far ,limit Indicates whether there is a size limit for the current digit .
3.solve What you get is [0,x] The number of intervals that meet the requirements , Want to get [L,R], use solve(R)-solve(L-1) that will do .
4. Make a reasonable plan dp Number and meaning of dimensions of array ,dfs The state of being carried , The filter condition is digits dp The key to .
Templates
/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
#define _for(i,a,b) for(int i=a;i<=b;i++)
ll dp[15][15][2];
int a[15];
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int spot;
ll dfs(int pos,int pre,int st,int sum,int limit){
if(!pos) return sum;
if(!limit&&dp[pos][sum][st]!=-1) return dp[pos][sum][st];
ll res=0;
int maxn=limit?a[pos]:9;
_for(i,0,maxn){
res+=dfs(pos-1,i,st&&(i==0),sum+((!st||i)&&(i==spot)),limit&&i==maxn);
}
dp[pos][sum][st]=res;
return res;
}
ll solve(ll x)
{
ll ans;
int len=0;
while(x) a[++len]=x%10,x/=10;
memset(dp,-1,sizeof(dp));
return ans=dfs(len,0,1,0,1);
}
int main(){
ll ANS=0;
ll L,R;
scanf("%lld%lld",&L,&R);
_for(i,0,9){
spot=i;
printf("%lld ",solve(R)-solve(L-1));
}
}
边栏推荐
- 107. Some details of SAP ui5 overflow toolbar container control and resize event processing
- 每日刷题记录 (十三)
- Inventory of more than 17 typical security incidents in January 2022
- Learning of basic amplification circuit
- 1189. Maximum number of "balloons"
- PyTorch: In-place Operation
- Expose testing outsourcing companies. You may have heard such a voice about outsourcing
- SAP UI5 应用开发教程之一百零七 - SAP UI5 OverflowToolbar 容器控件介绍的试读版
- 抓包整理外篇——————状态栏[ 四]
- Get to know ROS for the first time
猜你喜欢
随机推荐
IT转测试岗,从迷茫到坚定我究竟付出了什么?
[Yocto RM]10 - Images
lambda表达式
Multilingual Wikipedia website source code development part II
Paxos 入门
[Yocto RM]10 - Images
[error reporting] "typeerror: cannot read properties of undefined (reading 'split')“
Summer challenge brings you to play harmoniyos multi terminal piano performance
The most complete regular practical guide of the whole network. You're welcome to take it away
Hologres query management and timeout processing
Kibana index, mapping, document operation
User login function: simple but difficult
Get to know ROS for the first time
Deux nombres se remplacent
[STM32] (I) overview and GPIO introduction
多模输入事件分发机制详解
Enterprise application business scenarios, function addition and modification of C source code
uniapp上传头像
ORB(Oriented FAST and Rotated BRIEF)
P3304 [sdoi2013] diameter (diameter of tree)