锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
鍏堟潵鐪嬩竴涓瘮杈冩湁鎸戞垬鎬х殑棰樼洰錛氾級
Problem
Bob鍠滄鐜╃數鑴戞父鎴忥紝鐗瑰埆鏄垬鐣ユ父鎴忋備絾鏄粬緇忓父鏃犳硶鎵懼埌蹇熺帺榪囨父鎴忕殑鍔炴硶銆傜幇鍦ㄤ粬鏈変釜闂銆?
浠栬寤虹珛涓涓彜鍩庡牎錛屽煄鍫′腑鐨勮礬褰㈡垚涓媯墊爲銆備粬瑕佸湪榪欐5鏍戠殑緇撶偣涓婃斁緗渶灝戞暟鐩殑澹叺錛屼嬌寰楄繖浜涘+鍏佃兘浜嗘湜鍒版墍鏈夌殑璺?
娉ㄦ剰錛屾煇涓+鍏靛湪涓涓粨鐐逛笂鏃訛紝涓庤緇撶偣鐩歌繛鐨勬墍鏈夎竟灝嗛兘鍙互琚簡鏈涘埌銆?
璇蜂綘緙栦竴紼嬪簭錛岀粰瀹氫竴鏍戯紝甯瓸ob璁$畻鍑轟粬闇瑕佹斁緗渶灝戠殑澹叺.
Input
絎竴琛屼負涓鏁存暟錛紝琛ㄧず鏈夛輯緇勬祴璇曟暟鎹?
姣忕粍嫻嬭瘯鏁版嵁琛ㄧず涓媯墊爲錛屾弿榪板涓嬶細
絎竴琛?N錛岃〃紺烘爲涓粨鐐圭殑鏁扮洰銆?
絎簩琛岃嚦絎琋+1琛岋紝姣忚鎻忚堪姣忎釜緇撶偣淇℃伅錛屼緷嬈′負錛氳緇撶偣鏍囧彿i錛宬(鍚庨潰鏈塳鏉¤竟涓庣粨鐐笽鐩歌繛)銆?
鎺ヤ笅鏉涓暟錛屽垎鍒槸姣忔潯杈圭殑鍙︿竴涓粨鐐規爣鍙穜1錛宺2錛?..錛宺k銆?
瀵逛簬涓涓猲(0<n<=1500)涓粨鐐圭殑鏍戯紝緇撶偣鏍囧彿鍦?鍒皀-1涔嬮棿錛屽湪杈撳叆鏁版嵁涓瘡鏉¤竟鍙嚭鐜頒竴嬈°?/font>
Output
杈撳嚭鏂囦歡浠呭寘鍚竴涓暟錛屼負鎵姹傜殑鏈灝戠殑澹叺鏁扮洰銆?/font>
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?wbr>錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?
榪欎釜棰樼洰鏄?4騫撮珮浜屽噯澶嘚OIP鐨勬椂鍊欑湅鍒拌繃錛屽綋鏃舵墦姝繪病鏈夋兂鍑烘湁鏁堢殑瑙e喅鏂規硶銆傜劧鍚庡氨鎷跨潃棰樼洰鍘婚棶鎴戜滑寤栬佸笀錛屽粬鑰佸笀涓鎷垮埌棰樼洰棰樼洰榪樻病鐪嬪畬錛岀珛椹粰鍑轟簡瑙e喅鏂規錛氫笉浼氳冭繖涔堥毦鐨勯銆備簬鏄繖涓鐩篃灝遍仐鐣欎簡涓嬫潵錛屾病鎯沖埌浜嬮殧榪欎箞澶氬勾浠ュ悗鍙堥噸鏂拌璇嗕簡榪欎釜棰樼洰錛屽嶆劅浜插垏錛屽懙鍛祣銆?
榪欎釜棰樼洰鐪嬩笂鍘繪兂鍥捐錛岃椽蹇冩槸鏄庢樉閿欒鐨勩傜敤鍔ㄦ佽鍒掔殑鎬濇兂鍙互寰堟湁鏁堝湴瑙e喅銆傚氨鐪嬩綘鑳戒笉鑳界湅鍑烘潵鏄姩鎬佽鍒掋傚氨鍍忔潹娼囪鐨勶細鍔ㄦ佽鍒掕繖綾婚錛屽埆浜轟竴璇村氨鏄庣櫧錛岃嚜宸卞氨寰堥毦鎯沖埌銆?
鍦ㄧ粰鍑鴻繖涓鐩殑鐘舵佽漿縐繪柟紼嬩箣鍓嶏紝鎴戜滑鍏堜粠鏇寸畝鍗曠殑鏍戝瀷鍔ㄦ佽鍒掑叆鎵嬶紝鐪嬬湅鍏朵粬涓浜涢鐩?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
棰樼洰
鏈変竴媯佃嫻鏋滄爲錛屽鏋滄爲鏋濇湁鍒嗗弶錛屼竴瀹氭槸鍒?鍙夛紙灝辨槸璇存病鏈夊彧鏈?涓効瀛愮殑緇撶偣錛?
榪欐5鏍戝叡鏈塏涓粨鐐癸紙鍙跺瓙鐐規垨鑰呮爲鏋濆垎鍙夌偣錛夛紝緙栧彿涓?-N,鏍戞牴緙栧彿涓瀹氭槸1銆?
鎴戜滑鐢ㄤ竴鏍規爲鏋濅袱绔繛鎺ョ殑緇撶偣鐨勭紪鍙鋒潵鎻忚堪涓鏍規爲鏋濈殑浣嶇疆銆備笅闈㈡槸涓棰楁湁4涓爲鏋濈殑鏍?
2 5
\ /
3 4
\ /
1
鐜板湪榪欓鏍戞灊鏉″お澶氫簡錛岄渶瑕佸壀鏋濄備絾鏄竴浜涙爲鏋濅笂闀挎湁鑻規灉銆?
緇欏畾闇瑕佷繚鐣欑殑鏍戞灊鏁伴噺錛屾眰鍑烘渶澶氳兘鐣欎綇澶氬皯鑻規灉銆?/font>
杈撳叆鏍煎紡
絎?琛?涓暟錛孨鍜孮(1<=Q<= N,1<N<=100)銆?
N琛ㄧず鏍戠殑緇撶偣鏁幫紝Q琛ㄧず瑕佷繚鐣欑殑鏍戞灊鏁伴噺銆傛帴涓嬫潵N-1琛屾弿榪版爲鏋濈殑淇℃伅銆?
姣忚3涓暣鏁幫紝鍓嶄袱涓槸瀹冭繛鎺ョ殑緇撶偣鐨勭紪鍙楓傜3涓暟鏄繖鏍規爲鏋濅笂鑻規灉鐨勬暟閲忋?
姣忔牴鏍戞灊涓婄殑鑻規灉涓嶈秴榪?0000涓?/font>
杈撳嚭鏍煎紡
涓涓暟錛屾渶澶氳兘鐣欎綇鐨勮嫻鏋滅殑鏁伴噺銆?
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?wbr>錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?
鎴戜滑鐢╝[i][j]鎻忚堪鏍戯紝f[i][m]琛ㄧず絎琲涓妭鐐逛笅錛屽叡淇濈暀m涓爲鏋濈殑鏈澶ц嫻鏋滄暟鐩?
[闂鎻忚堪]
鍦ㄥぇ瀛﹂噷姣忎釜瀛︾敓錛屼負浜嗚揪鍒頒竴瀹氱殑瀛﹀垎錛屽繀欏諱粠寰堝璇劇▼閲岄夋嫨涓浜涜紼嬫潵瀛︿範錛屽湪璇劇▼閲屾湁浜涜紼嬪繀欏誨湪鏌愪簺璇劇▼涔嬪墠瀛︿範錛屽楂樼瓑鏁板鎬繪槸鍦ㄥ叾瀹冭紼嬩箣鍓嶅涔犮傜幇鍦ㄦ湁N闂ㄥ姛璇撅紝姣忛棬璇炬湁涓鍒嗭紝姣忛棬璇炬湁涓闂ㄦ垨娌℃湁鐩存帴鍏堜慨璇撅紙鑻ヨ紼媋鏄紼媌鐨勫厛淇鍗沖彧鏈夊瀹屼簡璇劇▼a錛屾墠鑳藉涔犺紼媌錛夈備竴涓鐢熻浠庤繖浜涜紼嬮噷閫夋嫨M闂ㄨ紼嬪涔狅紝闂粬鑳借幏寰楃殑鏈澶у鍒嗘槸澶氬皯錛?/font>
杈撳叆錛?
絎竴琛屾湁涓や釜鏁存暟N,M鐢ㄧ┖鏍奸殧寮銆?1<=N<=200,1<=M<=150)
鎺ヤ笅鏉ョ殑N琛?絎琁+1琛屽寘鍚袱涓暣鏁発i鍜宻i, ki琛ㄧず絎琁闂ㄨ鐨勭洿鎺ュ厛淇錛宻i琛ㄧず絎琁闂ㄨ鐨勫鍒嗐傝嫢ki=0琛ㄧず娌℃湁鐩存帴鍏堜慨璇撅紙1<=ki<=N, 1<=si<=20錛夈?/font>
杈撳嚭錛?
鍙湁涓琛岋紝閫塎闂ㄨ紼嬬殑鏈澶у緱鍒嗐?/font>
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?wbr>錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?
0 0
/ | \ ----> /
1 2 3 1錛?錛?
杈堜喚铏界劧鍙樹簡錛屼絾鏄繕鏄湁鍔炴硶澶勭悊鐨勩?
f[i][k]=max{ s[i]+f[i.L][j]+f[i.R][k-j-1] , f[i.R][k] }
鍏朵腑鍚庤竟閭d釜f[i.R][k]灝辨槸澶勭悊杞崲涓轟簩鍙夋爲鏃剁殑鍏崇郴鐨勩?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
鐪嬪埌榪欓噷錛屾爲鍨嬪姩鎬佽鍒掑簲璇ュ彲浠ユ湁涓垵姝ヤ簡瑙d簡錛岄偅涔堟垜浠洖鍒版渶鍒濈殑閭d釜棰樼洰“鎴樼暐娓告垙”銆?
f[v][0]={ 鈭慺[v.Son][1] }
f[v][1]={ 鈭憁in{ f[v.Son][0], f[v.Son][1] }+1 }
榪欐牱闂渚垮畬緹庤В鍐充簡,鏃墮棿澶嶆潅搴(n2)
涓嬮潰鍐嶆潵涓涓鐩綔涓烘濊礬鎵╁睍,鍜屽垰鍒氱殑棰樼洰綾諱技:
鑳屾櫙
鏈変釜鍏徃瑕佷婦琛屼竴鍦烘櫄浼氥?
涓轟簡鑳界帺寰楀紑蹇冿紝鍏徃棰嗗鍐沖畾錛氬鏋滈個璇蜂簡鏌愪釜浜猴紝閭d箞涓瀹氫笉浼氶個璇蜂粬鐨勪笂鍙?
錛堜笂鍙哥殑涓婂徃錛屼笂鍙哥殑涓婂徃鐨勪笂鍙?#8230;…閮藉彲浠ラ個璇鳳級銆?/font>
棰樼洰
姣忎釜鍙傚姞鏅氫細鐨勪漢閮借兘涓烘櫄浼氬娣諱竴浜涙皵姘涳紝姹備竴涓個璇鋒柟妗堬紝浣挎皵姘涘肩殑鍜屾渶澶с?/font>
杈撳叆鏍煎紡
絎?琛屼竴涓暣鏁癗錛?<=N<=6000錛夎〃紺哄叕鍙哥殑浜烘暟銆?
鎺ヤ笅鏉琛屾瘡琛屼竴涓暣鏁般傜i琛岀殑鏁拌〃紺虹i涓漢鐨勬皵姘涘紉(-128<=x<=127)銆?
鎺ヤ笅鏉ユ瘡琛屼袱涓暣鏁癓錛孠銆傝〃紺虹K涓漢鏄L涓漢鐨勪笂鍙搞?
杈撳叆浠? 0緇撴潫銆?/font>
杈撳嚭鏍煎紡
涓涓暟錛屾渶澶х殑姘旀皼鍊煎拰銆?/font>
]]>
Total Submission(s): 1391 Accepted Submission(s): 577
Each test case contains a single line with several words. There will be at most 1000 characters in a line.
3
olleh !dlrow
m'I morf .udh
I ekil .mca
hello world!
I'm from hdu.
I like acm.
#include <string.h>
int main()
{
int i=0,n,length,t,j;
char ch,p[1001],temp;
scanf("%d",&n);
ch=getchar();
while(n--)
{
gets(p);
length=strlen(p);
t=0;
for(i=0;i<=length;i++)
{
if(p[i]==' '||p[i]=='\0')
{
for(j=t;j<(i+t)/2;j++)
{
temp=p[j];
p[j]=p[i-j+t-1];
p[i-j+t-1]=temp;
}
t=i+1;
}
}
printf("%s\n",p);
}
return 0;
}
]]>
#include <string.h>
#include <ctype.h>
char * index( const char *s, int c);
/*
** State machine for romantoint
**
** M D C L X V I
** 0: +1000/0 +500/0 +100/1 +50/0 +10/2 +5/0 +1/3
** 1: +800/0 -- +100/0 +50/0 +10/2 +5/0 +1/3
** 2: -- -- +80/0 +30/0 +10/2 +5/0 +1/3
** 3: -- -- -- -- +8/0 +3/0 +1/3
**
*/
int FromRoman(char *s)
{
int n=0;
int prev=0;
while (*s!=' '&&*s!=NULL) {
switch (toupper(*s))
{
case 'M': n += 1000 - prev*2;
prev=0;
break;
case 'D': n += 500 - prev*2;
prev=0;
break;
case 'C': n += 100;
if (prev < 100) n -= 2*prev;
prev=100;
break;
case 'L': n += 50;
if (prev < 50) n -= 2*prev;
prev=0;
break;
case 'X': n += 10;
if (prev < 10) n -= 2*prev;
prev=10;
break;
case 'V': n += 5;
if (prev < 5) n -= 2*prev;
prev=0;
break;
case 'I': n += 1;
prev=1;
break;
}
s++;
}
return n;
}
void PrintRoman(int n)
{
if (n<=0 || n>4999)
{
printf("out of range exception\n");
return;
}
while (n/1000)
{
printf("M");
n -= 1000;
}
switch(n/100)
{
case 0: break;
case 1: printf("C"); break;
case 2: printf("CC"); break;
case 3: printf("CCC"); break;
case 4: printf("CD"); break;
case 5: printf("D"); break;
case 6: printf("DC"); break;
case 7: printf("DCC"); break;
case 8: printf("DCCC"); break;
case 9: printf("CM"); break;
}
n %= 100;
switch(n/10)
{
case 0: break;
case 1: printf("X"); break;
case 2: printf("XX"); break;
case 3: printf("XXX"); break;
case 4: printf("XL"); break;
case 5: printf("L"); break;
case 6: printf("LX"); break;
case 7: printf("LXX"); break;
case 8: printf("LXXX"); break;
case 9: printf("XC"); break;
}
n %= 10;
switch(n) {
case 0: break;
case 1: printf("I"); break;
case 2: printf("II"); break;
case 3: printf("III"); break;
case 4: printf("IV"); break;
case 5: printf("V"); break;
case 6: printf("VI"); break;
case 7: printf("VII"); break;
case 8: printf("VIII"); break;
case 9: printf("IX"); break;
}
printf("\n");
}
#define STACKSIZE 1024
int nitems=0;
int stack[STACKSIZE];
int Pop()
{
if (!nitems) {
printf("stack underflow\n");
return 0;
}
return stack[--nitems];
}
void Push(int n)
{
if (nitems == STACKSIZE-1) {
printf("stack overflow\n");
return;
}
stack[nitems++] = n;
}
int PrintTop(void)
{
if (!nitems) {
printf("stack underflow\n");
return -1;
}
else {
PrintRoman(stack[nitems-1]);
return 0;
}
}
int PerformAdd(void)
{
int x,y;
if (nitems < 2) {
printf("stack underflow\n");
return -1;
}
y = Pop();
x = Pop();
Push(x+y);
return 0;
}
int PerformSub(void)
{
int x,y;
if (nitems < 2) {
printf("stack underflow\n");
return -1;
}
y = Pop();
x = Pop();
Push(x-y);
return 0;
}
int PerformMul(void)
{
int x,y;
if (nitems < 2) {
printf("stack underflow\n");
return -1;
}
y = Pop();
x = Pop();
Push(x*y);
return 0;
}
int PerformDiv(void)
{
int x,y;
if (nitems < 2) {
printf("stack underflow\n");
return -1;
}
y = Pop();
x = Pop();
if (y!=0)
Push(x/y);
else {
printf("division by zero exception\n");
Push(x);
}
return 0;
}
main()
{
char line[256];
//freopen("H.in","r",stdin);
// freopen("H.out","w",stdout);
while (fgets(line,sizeof(line),stdin)) {
if (line[0] == '=')
PrintTop();
else if (line[0] == '+')
PerformAdd();
else if (line[0] == '-')
PerformSub();
else if (line[0] == '*')
PerformMul();
else if (line[0] == '/')
PerformDiv();
else {
int n = FromRoman(line);
if (n > 0) {
Push(n);
}
}
}
}