观察单词表可以发现:
对于长度为3的单词,前两个字母相同的单词不超过7个
对于长度为4的单词,前两个字母相同的单词不超过35个
于是首先$O(26*26*nm)$预处理出
s1[x][i][j]表示(i,j)右上角里面字母x的出现次数
s2[x][y][i][j]表示(i,j)右上角里面单词xy的出现次数
枚举一个点,计算长度为1的单词的出现次数
枚举两个点,计算长度为2,3,4的单词的出现次数
总时间复杂度为$O(kn^2m^2)$,k不超过43
#include<cstdio>
#include<string>
using namespace std;
const int N=35,M=2265,S=26;
int n,m,i,j,x,y,a[N][N],ans,v1[S],v2[S][S],s1[S][N][N],f[S][S][N][N],s2[S][S][N][N];
char ch[N];string d[M];
struct E{int x,y;E*nxt;}*g3[S][S],*g4[S][S],pool[M],*cur=pool,*p;
inline void add3(int a,int b,int x){p=cur++;p->x=x;p->nxt=g3[a][b];g3[a][b]=p;}
inline void add4(int a,int b,int x,int y){p=cur++;p->x=x;p->y=y;p->nxt=g4[a][b];g4[a][b]=p;}
int main(){
d[0]="A";
d[1]="AA";
d[2]="AAA";
d[3]="AAAA";
d[4]="ABBE";
d[5]="ABED";
d[6]="ABET";
d[7]="ABLE";
d[8]="ABLY";
d[9]="ABUT";
d[10]="ACE";
d[11]="ACES";
d[12]="ACHE";
d[13]="ACID";
d[14]="ACME";
d[15]="ACNE";
d[16]="ACRE";
d[17]="ACT";
d[18]="AD";
d[19]="ADD";
d[20]="ADDS";
d[21]="ADO";
d[22]="ADS";
d[23]="AFAR";
d[24]="AFT";
d[25]="AGAR";
d[26]="AGE";
d[27]="AGED";
d[28]="AGER";
d[29]="AGES";
d[30]="AGO";
d[31]="AGOG";
d[32]="AGUE";
d[33]="AH";
d[34]="AID";
d[35]="AIDE";
d[36]="AIDS";
d[37]="AIL";
d[38]="AIM";
d[39]="AIMS";
d[40]="AIR";
d[41]="AIRS";
d[42]="AIRY";
d[43]="AJAR";
d[44]="AKIN";
d[45]="ALAS";
d[46]="ALBA";
d[47]="ALE";
d[48]="ALEE";
d[49]="ALGA";
d[50]="ALL";
d[51]="ALLY";
d[52]="ALMA";
d[53]="ALMS";
d[54]="ALOE";
d[55]="ALSO";
d[56]="ALUM";
d[57]="AM";
d[58]="AMEN";
d[59]="AMID";
d[60]="AMMO";
d[61]="AMOK";
d[62]="AMYL";
d[63]="AN";
d[64]="ANAL";
d[65]="AND";
d[66]="ANEW";
d[67]="ANON";
d[68]="ANT";
d[69]="ANTE";
d[70]="ANTI";
d[71]="ANTS";
d[72]="ANUS";
d[73]="ANY";
d[74]="APE";
d[75]="APED";
d[76]="APES";
d[77]="APEX";
d[78]="APSE";
d[79]="APT";
d[80]="AQUA";
d[81]="ARC";
d[82]="ARCH";
d[83]="ARCS";
d[84]="ARE";
d[85]="AREA";
d[86]="ARID";
d[87]="ARK";
d[88]="ARM";
d[89]="ARMS";
d[90]="ARMY";
d[91]="ART";
d[92]="ARTS";
d[93]="AS";
d[94]="ASH";
d[95]="ASK";
d[96]="ASKS";
d[97]="ASP";
d[98]="ASS";
d[99]="AT";
d[100]="ATE";
d[101]="ATOM";
d[102]="ATOP";
d[103]="AUNT";
d[104]="AURA";
d[105]="AUTO";
d[106]="AVER";
d[107]="AVID";
d[108]="AVOW";
d[109]="AWAY";
d[110]="AWE";
d[111]="AWED";
d[112]="AWL";
d[113]="AWLS";
d[114]="AWRY";
d[115]="AX";
d[116]="AXED";
d[117]="AXER";
d[118]="AXES";
d[119]="AXIS";
d[120]="AXLE";
d[121]="AXON";
d[122]="AYE";
d[123]="AYES";
d[124]="BABE";
d[125]="BABY";
d[126]="BACK";
d[127]="BAD";
d[128]="BADE";
d[129]="BAG";
d[130]="BAGS";
d[131]="BAH";
d[132]="BAIL";
d[133]="BAIT";
d[134]="BAKE";
d[135]="BALD";
d[136]="BALE";
d[137]="BALK";
d[138]="BALL";
d[139]="BALM";
d[140]="BAN";
d[141]="BAND";
d[142]="BANE";
d[143]="BANG";
d[144]="BANK";
d[145]="BANS";
d[146]="BAR";
d[147]="BARB";
d[148]="BARD";
d[149]="BARE";
d[150]="BARK";
d[151]="BARN";
d[152]="BARS";
d[153]="BASE";
d[154]="BASH";
d[155]="BASK";
d[156]="BASS";
d[157]="BAT";
d[158]="BATH";
d[159]="BATS";
d[160]="BAUD";
d[161]="BAWL";
d[162]="BAY";
d[163]="BAYS";
d[164]="BE";
d[165]="BEAD";
d[166]="BEAK";
d[167]="BEAM";
d[168]="BEAN";
d[169]="BEAR";
d[170]="BEAT";
d[171]="BEAU";
d[172]="BECK";
d[173]="BED";
d[174]="BEDS";
d[175]="BEE";
d[176]="BEEF";
d[177]="BEEN";
d[178]="BEEP";
d[179]="BEER";
d[180]="BEES";
d[181]="BEET";
d[182]="BEG";
d[183]="BEGS";
d[184]="BELL";
d[185]="BELT";
d[186]="BELY";
d[187]="BEND";
d[188]="BENT";
d[189]="BEST";
d[190]="BET";
d[191]="BETA";
d[192]="BETS";
d[193]="BEVY";
d[194]="BIAS";
d[195]="BIB";
d[196]="BIBS";
d[197]="BID";
d[198]="BIDE";
d[199]="BIDS";
d[200]="BIER";
d[201]="BIG";
d[202]="BIKE";
d[203]="BILE";
d[204]="BILK";
d[205]="BILL";
d[206]="BIN";
d[207]="BIND";
d[208]="BING";
d[209]="BINS";
d[210]="BIRD";
d[211]="BIT";
d[212]="BITE";
d[213]="BITS";
d[214]="BLAB";
d[215]="BLED";
d[216]="BLEW";
d[217]="BLIP";
d[218]="BLOB";
d[219]="BLOC";
d[220]="BLOT";
d[221]="BLOW";
d[222]="BLUE";
d[223]="BLUR";
d[224]="BOA";
d[225]="BOAR";
d[226]="BOAT";
d[227]="BOB";
d[228]="BOBS";
d[229]="BODE";
d[230]="BODY";
d[231]="BOG";
d[232]="BOGS";
d[233]="BOIL";
d[234]="BOLD";
d[235]="BOLL";
d[236]="BOLT";
d[237]="BOMB";
d[238]="BOND";
d[239]="BONE";
d[240]="BONG";
d[241]="BONY";
d[242]="BOO";
d[243]="BOOB";
d[244]="BOOK";
d[245]="BOOM";
d[246]="BOON";
d[247]="BOOR";
d[248]="BOOS";
d[249]="BOOT";
d[250]="BORE";
d[251]="BORN";
d[252]="BOSS";
d[253]="BOTH";
d[254]="BOUT";
d[255]="BOW";
d[256]="BOWL";
d[257]="BOWS";
d[258]="BOX";
d[259]="BOY";
d[260]="BOYS";
d[261]="BRA";
d[262]="BRAE";
d[263]="BRAG";
d[264]="BRAN";
d[265]="BRAS";
d[266]="BRAT";
d[267]="BRAY";
d[268]="BRED";
d[269]="BREW";
d[270]="BRIG";
d[271]="BRIM";
d[272]="BROW";
d[273]="BUCK";
d[274]="BUD";
d[275]="BUDS";
d[276]="BUFF";
d[277]="BUG";
d[278]="BUGS";
d[279]="BULB";
d[280]="BULK";
d[281]="BULL";
d[282]="BUM";
d[283]="BUMP";
d[284]="BUMS";
d[285]="BUN";
d[286]="BUNK";
d[287]="BUNS";
d[288]="BUNT";
d[289]="BUOY";
d[290]="BURL";
d[291]="BURN";
d[292]="BURP";
d[293]="BURY";
d[294]="BUS";
d[295]="BUSH";
d[296]="BUSS";
d[297]="BUST";
d[298]="BUSY";
d[299]="BUT";
d[300]="BUTT";
d[301]="BUY";
d[302]="BUYS";
d[303]="BUZZ";
d[304]="BY";
d[305]="BYE";
d[306]="BYTE";
d[307]="CAB";
d[308]="CABS";
d[309]="CAFE";
d[310]="CAGE";
d[311]="CAKE";
d[312]="CALF";
d[313]="CALL";
d[314]="CALM";
d[315]="CAM";
d[316]="CAME";
d[317]="CAMP";
d[318]="CAN";
d[319]="CANE";
d[320]="CANS";
d[321]="CANT";
d[322]="CAP";
d[323]="CAPE";
d[324]="CAPS";
d[325]="CAR";
d[326]="CARD";
d[327]="CARE";
d[328]="CARP";
d[329]="CARS";
d[330]="CART";
d[331]="CASE";
d[332]="CASH";
d[333]="CASK";
d[334]="CAST";
d[335]="CAT";
d[336]="CATS";
d[337]="CAVE";
d[338]="CAW";
d[339]="CEDE";
d[340]="CELL";
d[341]="CENT";
d[342]="CHAP";
d[343]="CHAR";
d[344]="CHAT";
d[345]="CHEF";
d[346]="CHEW";
d[347]="CHIC";
d[348]="CHIN";
d[349]="CHIP";
d[350]="CHIT";
d[351]="CHOP";
d[352]="CHUM";
d[353]="CITE";
d[354]="CITY";
d[355]="CLAD";
d[356]="CLAM";
d[357]="CLAN";
d[358]="CLAP";
d[359]="CLAW";
d[360]="CLAY";
d[361]="CLIP";
d[362]="CLOD";
d[363]="CLOG";
d[364]="CLOT";
d[365]="CLUB";
d[366]="CLUE";
d[367]="COAL";
d[368]="COAT";
d[369]="COAX";
d[370]="COCA";
d[371]="COCK";
d[372]="COCO";
d[373]="COD";
d[374]="CODE";
d[375]="COED";
d[376]="COG";
d[377]="COGS";
d[378]="COIL";
d[379]="COIN";
d[380]="COKE";
d[381]="COLD";
d[382]="COLT";
d[383]="COMB";
d[384]="COME";
d[385]="CON";
d[386]="CONE";
d[387]="COO";
d[388]="COOK";
d[389]="COOL";
d[390]="COON";
d[391]="COOP";
d[392]="COP";
d[393]="COPE";
d[394]="COPS";
d[395]="COPY";
d[396]="CORD";
d[397]="CORE";
d[398]="CORK";
d[399]="CORN";
d[400]="COST";
d[401]="COSY";
d[402]="COT";
d[403]="COTS";
d[404]="COVE";
d[405]="COW";
d[406]="COWL";
d[407]="COWS";
d[408]="COZY";
d[409]="CRAB";
d[410]="CRAG";
d[411]="CRAM";
d[412]="CREW";
d[413]="CRIB";
d[414]="CROP";
d[415]="CROW";
d[416]="CRUD";
d[417]="CRUX";
d[418]="CRY";
d[419]="CUB";
d[420]="CUBE";
d[421]="CUBS";
d[422]="CUE";
d[423]="CUED";
d[424]="CUES";
d[425]="CUFF";
d[426]="CULL";
d[427]="CULT";
d[428]="CUP";
d[429]="CUPS";
d[430]="CURB";
d[431]="CURD";
d[432]="CURE";
d[433]="CURL";
d[434]="CURS";
d[435]="CURT";
d[436]="CUSP";
d[437]="CUT";
d[438]="CUTE";
d[439]="CUTS";
d[440]="CYST";
d[441]="CZAR";
d[442]="DAD";
d[443]="DADS";
d[444]="DALE";
d[445]="DAM";
d[446]="DA