Gym 100623J Just To Lucky(디지털 dp)
사고방식: n은 10의 12차원이다. 곧 디지털 dp라고 생각할 수 있다. 그때는 판자가 없어서 디지털 dp를 어떻게 두드렸는지 잊어버렸다. 나중에 문제풀이를 봤는데 여전히 누드적인 디지털 dp였다.
dp[pos][sum][remain][mod];
pos: 현재 디지털
sum: 각 수위의 합
remain: 현재 열거된 수
mod: 매거막
9*12=108이므로 1-108을 매거하면 됩니다.
#include
#include
#include
#include
using namespace std;
typedef long long ll;
int a[15];
int dp[15][110][110][110];
ll dfs(int pos,int sum,int mod,int remain,bool limit)
{
if(!pos) return sum==mod&&remain==0;
if(dp[pos][sum][remain][mod]!=-1&&!limit) return dp[pos][sum][remain][mod];
int up = limit ? a[pos] : 9;
ll ans = 0;
for(int i = 0; i <= up; i++)
{
ans += dfs(pos-1,sum+i,mod,(remain*10+i)%mod,limit&&i==up);
}
if(!limit)
dp[pos][sum][remain][mod] = ans;
return ans;
}
void solve(ll t)
{
int len = 0;
while(t)
{
a[++len] = t%10;
t /= 10;
}
ll ans = 0;
for(int i = 1; i <= 108; i++)
{
ans += dfs(len,0,i,0,true);
}
cout<> m;
solve(m);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.