【数位DP】CF55D Beautiful numbers
$dp[x][p][pp]$表示第x位,当前已有数字mod 2520(1~9数字的lcm)为p,当前各位数字的lcm为pp 观察到数组太大,考虑压缩,第三维lcm最多只有9个数字,打表发现最多只有48个状态,压掉第三维即可 打表用一个状压然后set维护(广搜也可以)即可 有一个坑点:题目里似乎没有说关于0的事情(即数字里出现0)但是有人在CF上打这个比赛的时候问了出题人,碰到0不要管即可!!! 打表代码: 1 set<int>s; 2 inline void Make(int x){ 3 int ans=1; 4 for(int i=0;i<9;i++){ 5 if(((1<<i)&x)) ans=lcm(ans,i+1); 6 }s.insert(ans); 7 } 8 inline void States_Maker(){ 9 int ans=1; 10 for(int i=0;i<(1<<9);i++)Make(i); 11 while(!s.empty()){ 12 cout<<*s.begin()<<","; 13 s.erase(s.begin()); 14 } 15 } 解题代码: 1 #include<bits/stdc++.h> 2 #define int long long 3 #define writeln(x) write(x),puts("") 4