当前位置:网站首页>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));
}
}边栏推荐
- 2022.07.03(LC_6111_统计放置房子的方式数)
- 26.2 billion! These universities in Guangdong Province have received heavy support
- 1189. Maximum number of "balloons"
- Basic concept and usage of redis
- Applet live + e-commerce, if you want to be a new retail e-commerce, use it!
- leetcode518,377
- dotnet-exec 0.6.0 released
- GDB常用命令
- Consolidated expression C case simple variable operation
- [Yocto RM]10 - Images
猜你喜欢
随机推荐
Life is changeable, and the large intestine covers the small intestine. This time, I can really go home to see my daughter-in-law...
He worked as a foreign lead and paid off all the housing loans in a year
挖财学院开户安全的吗?开户怎么开?
[paper reading] Tun det: a novel network for meridian ultra sound nodule detection
Multilingual Wikipedia website source code development part II
[circuit design] optocoupler use and circuit design summary
leetcode494,474
Enterprise application business scenarios, function addition and modification of C source code
多模输入事件分发机制详解
SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤
[error reporting] "typeerror: cannot read properties of undefined (reading 'split')“
The waterfall flow layout demo2 (method 2) used by the uniapp wechat applet (copy and paste can be used without other processing)
Apifox (postman + swagger + mock + JMeter), an artifact of full stack development and efficiency improvement
[selenium automation] common notes
Getting started with Paxos
Summer challenge brings you to play harmoniyos multi terminal piano performance
dotnet-exec 0.6.0 released
TS快速入门-函数
Kibana index, mapping, document operation
Consolidated expression C case simple variable operation








