@Lucifer: Ya,got it now..thanks a lot! :) On Thu, Dec 29, 2011 at 7:43 AM, Lucifer <sourabhd2...@gmail.com> wrote: > @rajat.. > > First of all.. sorry for the late reply :) > > Below i have explained the dp approach by taking.. Once u trace it u > will be able to understand the code.. > > Lets denote the no. of digits by K.. > > Now when K = 1, then the no. of digits that can formed is 10 i.e 0 to > 9... > > Say, P(K) denotes the no. of integers that can be formed using K > digits.. > > Hence, when K = 2, the digits would be : > > 00 01 02 03 04 05 06 07 08 09 - Line 1 > For simplicity lets remove all leading 0's from Line 1..Hence we will > get, > > 0 1 2 3 4 5 6 7 8 9 - Line 1 > Now, we can assume to put the first integer 0 in a separate line > called Line 0, as its the only integer whose value is 0 after removing > all leading 0's. > > 0 - Line 0 > 1 2 3 4 5 6 7 8 9 - Line 1 > 11 12 13 14 15 16 17 18 19 - Line 2 > 22 23 24 25 26 27 28 29 - Line 3 > ................continued... > 88 89 > 99 - Line 10 > > Total no. of integers from Line 0 to Line 10 = 1+ 9 + 9 + 8 + 7 + ... > + 1 = 55 > > Let Q(K) be defined as the no. of integers that can be formed by using > K digits where each integer has size K. > > Hence, we reduce P(K) as shown below: > P(K) = 1 (for the first 0 integer) + Q(1) + Q(2) + Q(3) + .... + Q(K) > > For K=2, as in the above example.. > > P(2) = 1 + Q(1) + Q(2) > = 1 + ( 9 ) + (9 + 8 + ...+ 1) > = 1 + 9 + 45 = 55 > > If you observe closely then u will see that Q(2) i.e Line 2 to Line 10 > has been generated based on Q(1) i.e Line 1. > > Here, is where DP comes into play. If we can find a way to generate > Q(i) given Q(i-1) then we are done. > > // Lets look at array A with 1-based indexing for simplicity > Now, say if we have an array A[9], such that A[i] is used to keep > track of no. of integers of size 'L' which start with digit 'i'. > > Now, say for size 'L+1' we need to calculate new value for A[9] ( say > we store the new values in A(new)[9] > The no. of integers that can be formed of size 'L+1' having the > leading digit as 9 is same > as the no. of integers starting with 9 of size 'L'. > Therefore, > A(new)[9] = A[9]. > > Now, > The no. of integers that can be formed of size 'L+1' having the > leading digit as 8 is equal to > the no. of integers starting with 8 of size 'L' > + > the no. of integers starting with 9 of size 'L' > > A(new)[8] = A[8] + A[9] > > Similarly, > A(new)[1] = A[1] + A[2] + ...+ A[9] > > If you observe closely u will see that all we are doing is taking the > cumulative sum from A[9] to A[1] > > Hence, we can modify the same array as follows: > > // for size 'L+1', given A which stores the information for size > 'L'... > // After executing the following code, A will store information for > size 'L+1' > for (int i = 8; i >=1 ; --i) > A[i] += A[i+1]; > > Hence, all we need to do is run the for loop for K - 1 times for K>1 > and at the end of each loop record the sum of entire array and add it > to the totalSum. Also add 10 to totalSum at the beginning of the > entire algo, as we know that for K=1 the no. of integers are 10.. > > Now array A needs to be initialized as follows: > > Q(1) = 9 and the corresponding array values would be as follows: > > A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] > 1 1 1 1 1 1 1 1 1 > > Now, Q(2) = 45 and the corresponding array values would be as follows: > > A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] > 9 8 7 6 5 4 3 2 1 > > Q(3) = 165 and the corresponding array values would be as follows: > > A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] > 45 36 28 21 15 10 6 3 1 > > // Q(i) is nothing but the sum of the entire array.. > > Hence, P(3) = 10 ( 1+ 9 for K =1) + 45 ( Q(2) ) + 165 ( Q(3) ) > = 220. > > ------------------------------------------ > > On Dec 28, 1:21 pm, sourabh singh <singhsourab...@gmail.com> wrote: >> @All are these output's correct ?? >> >> 288230376151711744 20164264869698944 >> 144115188075855872 5130634330054016 >> 72057594037927936 5130634330054016 >> 36028797018963968 1306288411057536 >> 18014398509481984 1306288411057536 >> 9007199254740992 332818957147520 >> 4503599627370496 332818957147520 >> 2251799813685248 84859707399552 >> 1125899906842624 84859707399552 >> 562949953421312 21654400343424 >> 281474976710656 21654400343424 >> 140737488355328 5530598972800 >> 70368744177664 5530598972800 >> 35184372088832 1413883960704 >> 17592186044416 1413883960704 >> >> On Tue, Dec 27, 2011 at 11:20 PM, sourabh singh >> <singhsourab...@gmail.com>wrote: >> >> >> >> >> >> >> >> > @all >> >> > plz point out wat's wrong with this code. works for small numbers but >> > fails for large number's >> >> > #include<conio.h> >> > #include<iostream> >> > using namespace std; >> > unsigned int find_nCp(unsigned int n,unsigned int p) >> > { unsigned int j=p; >> > unsigned int num=1,den=1; >> > for(;j;j--) >> > num*=n--; >> > for(;p;p--) >> > den*=p; >> > return (num/den); >> > } >> >> > unsigned int num(unsigned int n,unsigned int k) >> > { >> > if(n==1 || k==0) >> > return 1; >> > return find_nCp(n,k) + num(n-2,(n-1)/2); >> > } >> > main() >> > { uint64_t n,p,test=1; >> > unsigned int t,i,sum,j; >> > scanf("%u",&t); >> > while(t--) >> > { n=test<<t; >> > scanf("%llu",&n); >> > if(n<4) >> > cout<<0<<endl; >> > else >> > { for(p=1,i=0;p<=n;p=p<<1,i++); >> > i=i-2; >> > if(i%2==0) >> > { >> > i--; >> > } >> > cout<<num(i,i/2)<<endl; >> > getch(); >> > } >> > } >> > return 0; >> > } >> >> > On Tue, Dec 27, 2011 at 10:33 AM, kumar rajat >> > <thebossku...@gmail.com>wrote: >> >> >> *I am not able to follow.. >> >> >> On Tue, Dec 27, 2011 at 11:47 PM, kumar rajat <thebossku...@gmail.com> >> >> wrote: >> >> > @Lucifier: >> >> > Thanks a lot.. >> >> > But,I am able to follow the code that u posted for Non-Decreasing >> >> Digits. >> >> > Can u jus explain ur algo instead of givin the code directly? >> >> > Thanks once again. >> >> >> > On Tue, Dec 27, 2011 at 10:44 PM, Lucifer <sourabhd2...@gmail.com> >> >> wrote: >> >> >> @ Special Nos.. >> >> >> Well the actual logic would be : >> >> >> int count = 0;for ( int i = 2; i <= LOGbase2(N) ; i+=2) count+= >> >> >> [ (i-1) C (i/2) ] ; // here xCy is nothing but the no. of ways y items >> >> >> can be selected from a collection of x items. >> >> >> Hence, the working code: >> >> >> int totalCount = 0; >> >> >> int interCnt = 1; >> >> >> >> if ( LOGbase2(N) > 1) >> >> >> { >> >> >> totalCount = 1; // for LOGbase2(N) = 2... >> >> >> >> for ( int i = 4; i <= LOGbase2(N) ; i+=2) >> >> >> { >> >> >> interCnt = (i-1)*(i-2) * interCnt / ( i/2 * (i/2 -1)); >> >> >> totalCount += interCnt; >> >> >> >> } >> >> >> printf("%d", totalCount); >> >> >> } >> >> >> else >> >> >> printf("%d", 0); >> >> >> On Dec 27, 7:38 pm, Tasvinder Singh <tasvinde...@gmail.com> wrote: >> >> >>> I think the first problem involves some mathematics... >> >> >>> In this we fix the first bit and if the remaining no. of bits are odd >> >> then >> >> >>> we calculate the no. as follows >> >> >> >>> If we have 2^4=16 then total bits 5 so we do not include this. >> >> >>> Total no. of bits in one less than the given no. (in this eg. 15) is >> >> 4. >> >> >>> Fix first bit, no. of bits remaining = 3 >> >> >>> Now let 2 bits are 0 and one bit 1. We have total 3!/(2!*1!) = 3 >> >> >>> combinations. >> >> >> >>> Now go for next even no which is 2 in this case again do the same >> >> >>> Fix first bit, no. of bits remaining = 1 >> >> >>> Now let 1 bit is 0. We have total 1!/(0!*1!) = 1 combinations. >> >> >> >>> Next even 0. stop here. >> >> >>> You can go for this by starting from 2 till no. is less than given N >> >> >> >>> On Tue, Dec 27, 2011 at 7:28 PM, kumar rajat <thebossku...@gmail.com> >> >> wrote: >> >> >>> > Hi >> >> >>> > I have jus started to learn DP and I have coded the standard >> >> >>> > algorithms(LCS,etc). >> >> >>> > I have been trying these problems in SPOJ: >> >> >> >>> >http://www.spoj.pl/problems/NOVICE63/ >> >> >>> >http://www.spoj.pl/problems/NY10E/ >> >> >> >>> > I understand these may be solved elegantly using DP,but I dont get >> >> to >> >> >>> > code the same. >> >> >>> > Can any1 help me how to solve these types of problems using DP? >> >> >>> > Any help regarding the same will be greatly appreciated. >> >> >> >>> > -- >> >> >>> > You received this message because you are subscribed to the Google >> >> Groups >> >> >>> > "Algorithm Geeks" group. >> >> >>> > To post to this group, send email to algogeeks@googlegroups.com. >> >> >>> > To unsubscribe from this group, send email to >> >> >>> > algogeeks+unsubscr...@googlegroups.com. >> >> >>> > For more options, visit this group at >> >> >>> >http://groups.google.com/group/algogeeks?hl=en. >> >> >> >>> -- >> >> >>> Tasvinder Singh >> >> >>> B.Tech Final Year, >> >> >>> Department of Computer Engineering, >> >> >>> Malaviya National Institute Of Technology, Jaipur. >> >> >>> Contact: +91-9460627331 >> >> >> >> -- >> >> >> You received this message because you are subscribed to the Google >> >> Groups "Algorithm Geeks" group. >> >> >> To post to this group, send email to algogeeks@googlegroups.com. >> >> >> To unsubscribe from this group, send email to >> >> algogeeks+unsubscr...@googlegroups.com. >> >> >> For more options, visit this group at >> >>http://groups.google.com/group/algogeeks?hl=en. >> >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> >> "Algorithm Geeks" group. >> >> To post to this group, send email to algogeeks@googlegroups.com. >> >> To unsubscribe from this group, send email to >> >> algogeeks+unsubscr...@googlegroups.com. >> >> For more options, visit this group at >> >>http://groups.google.com/group/algogeeks?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Algorithm Geeks" group. > To post to this group, send email to algogeeks@googlegroups.com. > To unsubscribe from this group, send email to > algogeeks+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/algogeeks?hl=en. >
-- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.