µ±Ç°Î»ÖãºÊ×Ò³ > µÚ6½² - - ¶¯Ì¬¹æ»®×¨Ìâ½²×ù
Òò¶øÓÐµÝ¹é¹ØÏµ£º
q(i)=max(q(j))+1 (a[j]¡Ýa[i],1¡Üi { max=0; for(j=i+1;j<=n;j++) if(a[i]<=a[j] && q(j)>max) max=q(j); f=max+1; } return f; } (3) ÔÚÖ÷º¯ÊýÖÐÒÀ´Îµ÷ÓÃq(n?1),?,q(1)£¬±È½ÏÕân?1¸öÖµµÃÆäÖеÄ×î´óÖµlmax£¬¼´ÎªËùÇóµÄ×·Ç½µ×ÓÐòÁеij¤¶È¼´×îÓÅÖµ¡£ £¨4£©¹¹Ôì×îÓŽ⠴ÓÐòÁеĵÚ1Ïʼ£¬ÒÀ´ÎÊä³öq(i)·Ö±ðµÈÓÚlmax,lmax?1,?,1ËùÄǾ͵ÄÏîa[i]£¬Õâ¾ÍÊÇËùÇóµÄÒ»¸ö×·Ç½µ×ÓÐòÁС£ £¨5£©µÝ¹éʵÏÖ¶¯Ì¬¹æ»®³ÌÐòÉè¼Æ // µÝ¹éʵÏÖ¶¯Ì¬¹æ»® #include { int t,x,lmax; int q(int i); t=time(0)00;srand(t); // Ëæ»úÊý·¢ÉúÆ÷³õʼ»¯ printf(\ scanf(\ for(i=1;i<=n;i++) {a[i]=rand()%(5*n)+10; // ²úÉú²¢Êä³ön¸öÊý×é³ÉµÄÐòÁÐ printf(\ } lmax=0; for(i=n-1;i>=1;i--) if(q(i)>lmax) lmax=q(i); // ±È½ÏµÃ×î´ó·Ç½µÐòÁг¤ printf(\Êä³ö×î´ó·Ç½µÐòÁг¤ x=lmax; for(i=1;i<=n;i++) if(q(i)==x) {printf(\Êä³öÒ»¸ö×î´ó·Ç½µÐòÁÐ } 4£®³ÌÐòÔËÐÐʾÀýÓëÌÖÂÛ ÔËÐгÌÐò£¬input n(n<2000):12 48 16 45 47 52 46 36 28 46 69 14 42 L=5. 16 45 47 52 69 ×¢Ò⣬Ëù¸øÐòÁ㤶ÈΪ5µÄ·Ç½µ×ÓÐòÁпÉÄÜÓжà¸ö£¬ÕâÀïÖ»Êä³öÆäÖÐÒ»¸ö¡£ ÓÉÉÏ¿ÉÖª£¬ÔÚ¶¯Ì¬¹æ»®Éè¼ÆÖУ¬×îÓÅÖµ¿É¾µÝÍÆµÃµ½£¬Ò²¿É¾µÝ¹éµÃµ½¡£Ò»°ãµØ£¬Ó¦ÓõÝÍÆÐ§Âʸü¸ßЩ£¬ÒÔϸ÷°¸ÀýµÄ¶¯Ì¬¹æ»®Éè¼ÆÖоùÓ¦ÓõÝÍÆµÃ×îÓÅÖµ¡£ 6.2.2 ×¹«¹²×ÓÐòÁÐ Ò»¸ö¸ø¶¨ÐòÁеÄ×ÓÐòÁÐÊÇÔÚ¸ÃÐòÁÐÖÐɾȥÈô¸É¸öÔªËØºóËùµÃµ½µÄÐòÁС£ÓÃÊýѧÓïÑÔ±íÊö£¬ ¸ø¶¨ÐòÁÐX??x1,x2,?,xm?£¬ÁíÒ»ÐòÁÐZ??z1,z2,?,zk?£¬XµÄ×ÓÐòÁÐÊÇÖ¸´æÔÚÒ»¸öÑϸñµÝÔö ϱêÐòÁÐ?i1,i2,?,ik?ʹµÃ¶ÔÓÚËùÓÐj=1,2,?,kÓÐzj?xij¡£ÀýÈ磬ÐòÁÐZ??b,d,c,a?ÊÇÐòÁÐ X??a,b,c,d,c,b,a?µÄÒ»¸ö×ÓÐòÁУ¬»ò°´½ô´Õ¸ñʽÊéд£¬ÐòÁС°bdca¡±ÊÇ¡°abcdcba¡±µÄÒ»¸ö ×ÓÐòÁС£ ÈôÐòÁÐZÊÇÐòÁÐXµÄ×ÓÐòÁУ¬ÓÖÊÇÐòÁÐYµÄ×ÓÐòÁУ¬Ôò³ÆZÊÇÐòÁÐXÓëYµÄ¹«¹²×ÓÐòÁС£ÀýÈ磬ÐòÁС°bcba¡±ÊÇ¡°abcbdab¡±Óë¡°bdcaba¡±µÄ¹«¹²×ÓÐòÁС£ 1. °¸ÀýÌá³ö ¸ø¶¨Á½¸öÐòÁÐX??x1,x2,?,xm?ºÍY??y1,y2,?,yn?£¬ÕÒ³öÐòÁÐXºÍYµÄ× ¹«¹²×ÓÐòÁС£ ÀýÈ磬¸ø³öÐòÁÐX£ºhsbafdreghsbacdbaÓëÐòÁÐY£ºacdbegshbdrabsa£¬ÕâÁ½¸öÐòÁеÄ×¹«¹²×ÓÐòÁÐÈçºÎÇóµÃ£¿ 2£®¶¯Ì¬¹æ»®Ëã·¨Éè¼Æ ÇóÐòÁÐXÓëYµÄ×¹«¹²×ÓÐòÁпÉÒÔʹÓÃÇî¾Ù·¨£ºÁгöXµÄËùÓÐ×ÓÐòÁУ¬¼ì²éXµÄÿһ¸ö×ÓÐòÁÐÊÇ·ñÒ²ÊÇYµÄ×ÓÐòÁУ¬²¢¼Ç¼ÆäÖй«¹²×ÓÐòÁеij¤¶È£¬Í¨¹ý±È½Ï×îÖÕÇóµÃXÓëYµÄ×¹«¹²×ÓÐòÁС£¶ÔÓÚÒ»¸ö³¤¶ÈΪmµÄÐòÁÐX£¬Æäÿһ¸ö×ÓÐòÁжÔÓ¦ÓÚϱ꼯{1,2,?,m}µÄ m Ò»¸ö×Ó¼¯£¬¼´XµÄ×ÓÐòÁÐÊýÄ¿¶à´ï2¸ö¡£Óɴ˿ɼûÓ¦ÓÃÇî¾Ù·¨Çó½âÊÇÖ¸Êýʱ¼äµÄ¡£ ×¹«¹²×ÓÐòÁÐÎÊÌâ¾ßÓÐ×îÓÅ×ӽṹÐÔÖÊ£¬Ó¦Óö¯Ì¬¹æ»®Éè¼ÆÇó½â¡£ £¨1£©½¨Á¢µÝÍÆ¹ØÏµ ÉèÐòÁÐX??x1,x2,?,xm?ºÍY??y1,y2,?,yn?µÄ×¹«¹²×ÓÐòÁÐΪZ??z1,z2,?,zk?£¬ ?xi,xi?1,?,xm?Óë?yj,yj?1,?,yn?(i=0,1,?,m;j=0,1,?,n)µÄ×¹«¹²×ÓÐòÁеij¤¶ÈΪ c(i,j)¡£ Èôi=m+1»òj=n+1£¬´ËʱΪ¿ÕÐòÁУ¬c(i,j)=0£¨±ß½çÌõ¼þ£©¡£ Èôx(1)=y(1)£¬ÔòÓÐz(1)=x(1),c(1,1)=c(2,2)+1£¨ÆäÖÐ1Ϊz(1)ÕâÒ»Ï£» Èôx(1)¡Ùy(1)£¬Ôòc(1,1)È¡c(2,1)Óëc(1,2)ÖеÄ×î´óÕß¡£ Ò»°ãµØ£¬Èôx(i)=y(j)£¬Ôòc(i,j)=c(i+1,j+1)+1£» Èôx(i)¡Ùy(j)£¬Ôòc(i,j)=max(c(i+1,j),c(i,j+1))¡£ Òò¶ø¹éÄÉΪµÝÍÆ¹ØÏµ£º 1¡Üi¡Üm,1¡Üj¡Ün,xi?yj??c(i?1,j?1)?1c(i,j)?? max(c(i,j?1),c(i?1,j))1¡Üi¡Üm,1¡Üj¡Ün,x?y?ij? ±ß½çÌõ¼þ£ºc(i,j)=0 £¨i=m+1»òj=n+1£© £¨2£©ÄæÍƼÆËã×îÓÅÖµ ¸ù¾ÝÒÔÉϵÝÍÆ¹ØÏµ£¬ÄæÍƼÆËã×îÓÅÖµc(0,0)Á÷³ÌΪ£º for(i=0;i<=m;i++) c[i][n]=0; // ¸³³õʼֵ for(j=0;j<=n;j++) c[m][j]=0; for(i=m?1;i>=0;i??) // ¼ÆËã×îÓÅÖµ for(j=n?1;j>=0;j??) if(x[i]==y[j]) c[i][j]=c[i+1][j+1]+1; else if(c[i][j+1]>c[i+1][j]) c[i][j]=c[i][j+1]; else c[i][j]=c[i+1][j]; printf(\×¹«¹²×Ó´®µÄ³¤¶ÈΪ£º%d\ // Êä³ö×îÓÅÖµ ÒÔÉÏË㷨ʱ¼ä¸´ÔÓ¶ÈΪO(mn)¡£ £¨3£©¹¹Ôì×îÓŽâ Ϊ¹¹Ôì×îÓŽ⣬¼´¾ßÌåÇó³ö×¹«¹²×ÓÐòÁУ¬ÉèÖÃÊý×és(i,j)£¬µ±x(i)=y(j)ʱs(i,j)=1£»µ±x(i)¡Ùy(j)ʱs(i,j)=0¡£ XÐòÁеÄÿһÏîÓëYÐòÁеÄÿһÏîÖðÒ»±È½Ï£¬¸ù¾Ýs(i,j)Óëc(i,j)ȡֵ¾ßÌå¹¹Ôì×¹«¹²×ÓÐòÁС£ÊµÊ©x(i)Óëy(j)±È½Ï£¬ÆäÖÐi=0,1,?,m?1;j=t,1,?,n?1£»±äÁ¿t´Ó0¿ªÊ¼È¡Öµ£¬µ±È·¶¨×¹«¹²×ÓÐòÁÐÒ»Ïîʱ£¬t=j+1¡£ÕâÑù´¦Àí¿É±ÜÃâÖØ¸´È¡Ïî¡£ Èôs(i,j)=1ÇÒc(i,j)=c(0,0)ʱ£¬È¡x(i)Ϊ×¹«¹²×ÓÐòÁеĵÚ1Ïî; Ëæºó£¬Èôs(i,j)=1ÇÒc(i,j)=c(0,0) ?1ʱ£¬È¡x(i)×¹«¹²×ÓÐòÁеĵÚ2Ïî; Ò»°ãµØ£¬Èôs(i,j)=1ÇÒc(i,j)=c(0,0) ?wʱ(w´Ó0¿ªÊ¼£¬Ã¿È·¶¨×¹«¹²×ÓÐòÁеÄÒ»ÏwÔö1)£¬È¡x(i)×¹«¹²×ÓÐòÁеĵÚwÏî¡£ ¹¹Ôì×¹«¹²×ÓÐòÁÐÃèÊö£º for(t=0,w=0,i=0;i<=m?1;i++) for(j=t;j<=n?1;j++) if(s[i][j]==1 && c[i][j]==c[0][0]?w) {printf(\ w++;t=j+1;break; } £¨4£©Ëã·¨µÄ¸´ÔÓ¶È·ÖÎö 2 ÒÔÉ϶¯Ì¬¹æ»®Ëã·¨µÄʱ¼ä¸´ÔÓ¶ÈΪO(n)¡£ 3£®×¹«¹²×ÓÐòÁÐC³ÌÐòʵÏÖ // ×¹«¹²×ÓÐòÁÐ #include {char x[N],y[N]; int i,j,m,n,t,w,c[N][N],s[N][N]; printf(\ÇëÊäÈëÐòÁÐx£º\// ÏȺóÊäÈëÐòÁÐ scanf(\ printf(\ÇëÊäÈëÐòÁÐy£º\ for(m=0,i=0;x[i]!='\\0';i++) m++; for(n=0,i=0;y[i]!='\\0';i++) n++; for(i=0;i<=m;i++) c[i][n]=0; // ¸³±ß½çÖµ for(j=0;j<=n;j++) c[m][j]=0; for(i=m?1;i>=0;i??) // µÝÍÆ¼ÆËã×îÓÅÖµ for(j=n?1;j>=0;j??) if(x[i]==y[j]) {c[i][j]=c[i+1][j+1]+1; s[i][j]=1; } else {s[i][j]=0; if(c[i][j+1]>c[i+1][j]) c[i][j]=c[i][j+1]; else c[i][j]=c[i+1][j]; } printf(\×¹«¹²×ÓÐòÁеij¤¶ÈΪ£º%d\// Êä³ö×îÓÅÖµ printf(\×¹«¹²×ÓÐòÁÐΪ£º\¹¹Ôì×îÓŽâ t=0;w=0; for(i=0;i<=m?1;i++) for(j=t;j<=n?1;j++) if(s[i][j]==1 && c[i][j]==c[0][0]?w) {printf(\ w++;t=j+1;break; }
¹²·ÖÏí92ƪÏà¹ØÎĵµ