hdu 3943 K-th Nya Number 디지털 dp

1735 단어 디지털 dphdu
제목 대의: 주어진 구간 [l,r], x, y, 이 구간에 x개 4, y개 7의 K를 포함하는 큰 수를 구하고, 그렇지 않으면 Nya를 출력합니다!
제목 분석: 먼저 계수에 통계하는 사상을 참조한다.dp[i][j][k]를 설정하면 i위에 j개 4, k개 7의 숫자가 몇 개 있다는 것을 나타낸다.분명히 dp[i-1][j][k]에 대해서는 dp[i][j+1][k]와 dp[i][j][k+1]로 옮길 수 있다.다른 8개 수(4,7 제외)에는 dp[i][j][k]=dp[i-1][j][k]*8.이렇게 하면 계수가 완성된다.통계적 사상은 더 이상 논술하지 않는다.
처리가 끝났으니 계수가 K가 크면 바로 2점 처리로 하겠습니다. 
세부 사항은 역시 구간을 여는 것에 주의해야 한다. 그렇지 않으면 웨이가 될 수 있다.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Rep(i,n) for(int i=0;i=0;i--)
#define MEM(a) memset(a,0,sizeof(a))
#define MEMI(a) memset(a,127,sizeof(a))
#define MEMi(a) memset(a,128,sizeof(a))
#define INF (2139062143)
#define phiF (1000000007)
#define MAXN (1000000+10)
typedef long long LL;

LL dp[25][25][25],digit[50],x,y;

inline void calc(){
	dp[0][0][0]=1;
	For(i,21){
		Rep(j,i)
		  Rep(k,i)
		 if (j+krr-ll) {
			printf("Nya!
"); continue; } t+=ll; LL ul(l+1),ur(r); while (ul>1; if (work(mid)>=t) ur=mid;else { ul=mid+1; } } printf("%lld
",ul-1); } } }

좋은 웹페이지 즐겨찾기