51nod1373 哈利與他的機械鍵盤

2022-03-30 12:42:30 字數 2182 閱讀 7178

作為一名屌絲程式設計師,機械鍵盤是哈利夢寐以求的神器。終於,在除夕夜的時候,他爸爸送了他乙個機械鍵盤。

哈利的鍵盤與我們平常所見到的的鍵盤不一樣,我們可以認為他的鍵盤是乙個500*500的矩形,其中26個字母鍵分布在某些格點上。這天,心血來潮的哈利想用他心愛的鍵盤寫一些**,假設他的**只有一行,而且都是由小寫的英文本母構成。由於鍵盤上的按鍵分布在不同的地方,哈利碼**時,移動手指要花費一些能量,其花費能量為上一次敲擊的鍵,與當前要敲的鍵的曼哈頓距離。為了節省力氣,哈利可以不必完全按照要敲的**輸入,他可以跳著輸,比如helloworld,他可以按照d r o o l l l e h w的順序輸入,但是為了讓輸入的**是他想要的輸入順序,在輸入的過程中,他可能需要移動游標,在相應的位置輸入對應的單詞,作為一名熟練的vim選手,哈利將游標移動乙個位置僅需1的費用,比如他想輸入qpy,他按q->y->p的順序輸入,那麼花費的總的能量為cost(q,y)+1+cost(y,p),其中cost(x,y)為字母x,y之間的曼哈頓距離,當中花費的1的能量為輸入y後,往左移動一次游標所花費的能量。當然,人的記憶力都是有限的,哈利最多只能記住連續10個位置的字母有沒有輸入過,也就是說如果想輸入第i個字元,要麼i<=10或者所有第i-10(包含)以前的字元都已經輸入,比如第1個位置的字母還沒有輸,他就不能考慮第11個字母,因為一旦考慮第11個字母的時候,他就忘了第1個字母有沒有輸了。現在哈利想知道,他敲完這篇**,最少需要多少能量?哈利第一次輸入的時候可以不花費能量。

input

前26行,每行兩個整數x, y (0<=x<500, 0<=y<500)以空格分開,表示26個英文本母鍵a-z所在位置,保證不會有兩個鍵在相同的位置

第27行為乙個長度不超過100的字串(非空),表示哈利要敲的**,由小寫字母a-z組成

output

輸出乙個整數,表示哈利敲完**最少花多少能量

狀壓dp。f[i][j][zt]表示考慮了前i位(i-10以前的都填完了),在最後10位里的第j位,最後10位里是否填了數的狀態為zt。

轉移的話,一種是從j挪到最後10位里的另外乙個未填的位,另一種是從j挪到第i+x位,要求x<=10且i-10..i-10+x都填了。

1 #include2 #include3 #include4 #include5 #include6

#define ll long long

7#define ui unsigned int

8#define ull unsigned long long

9const

int maxn=100233,inf=1002333333;10

int f[102][10][1233

];11

int dis[1233][10][11],map[29][29],x[29],y[29

];12

inti,j,k,n,m;

13char s[123],s1[123

];14

15int ra,fh;char

rx;16 inline int

read()

2223 inline void mins(int &a,int b)

24 inline int run(int

n)37

int ans=1

<<30;38

for(i=0;i<10;i++)mins(ans,f[n][i][mx-1

]);39

//printf(" %d\n",ans);

40return

ans;41}

42 inline int abs(int x)

43int

main()

5051

for(i=1;i<=26;i++)

55 scanf("

%s",s+1),n=strlen(s+1

);56

for(i=1;i<=n;i++)s[i]-='

a'-1;57

58if(n>=10)return printf("

%d\n

",run(n)),0;59

for(i=1;i<=n;i++)s1[i+10-n]=s[i];

60int ans=1

<<30;61

for(i=1;i<=26;i++)

66 printf("

%d\n

",ans);

67 }

view code

51nod 1082 與7無關的數

1082 與7無關的數 有道難題 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 乙個正整數,如果它能被7整除,或者它的十進位制表示法中某個位數上的數字為7,則稱其為與7相關的數。求所有小於等於n的與7無關的正整數的平方和。例如 n 8,8與7無關的數包括 1 2 ...

51Nod 1082 與7無關的數

乙個正整數,如果它能被7整除,或者它的十進位制表示法中某個位數上的數字為7,則稱其為與7相關的數。求所有小於等於n的與7無關的正整數的平方和。例如 n 8,8與7無關的數包括 1 2 3 4 5 6 8,平方和為 155。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 1000...

51 nod 1082 與7無關的數

與7無關的數 基準時間限制 1 秒 空間限制 131072 kb乙個正整數,如果它能被7整除,或者它的十進位制表示法中某個位數上的數字為7,則稱其為與7相關的數。求所有小於等於n的與7無關的正整數的平方和。例如 n 8,8與7無關的數包括 1 2 3 4 5 6 8,平方和為 155。input 第...