책보면서 열심히 문제풀이를 하는데, 막혔습니다
아래 코드에 보시면 reconstruct 함수 내에 assert(choose != -1);을 넣었는데, 제출해보면 assert에 의해서 중단됩니다. 그런데 왜 choose가 바뀌지 않는지/바뀌지 않은 choose에 접근하는지 도통 모르겠습니다. 도와주세요!!
코드
#include<iostream>#include<vector>#include<string>#include<algorithm>#include<cmath>#include<cassert>usingnamespacestd;intm,q;// m:단어의 수, q:처리할 문장의 수intn;//문장을 구성하는 단어의 갯수doubleB[501];// i단어의 문장처음출현확률doubleT[501][501];// i단어뒤에 j단어가 올 확률doubleM[501][501];// i단어를 j단어로 분류할 확률stringwords[501];// 인식가능한 단어들intsentence[101];intchoice[101][502];// -1 로 초기화doublecache[101][502];// 1.0으로 초기화doublerecSolve(intcurpos,intprevword){if(curpos==n){return0;}double&ret=cache[curpos][prevword];int&choose=choice[curpos][prevword];if(ret!=1.0)returnret;ret=-1e200;//log(0) = 음의무한대if(curpos==0){for(intthisword=0;thisword<m;thisword++){doublecand=B[sentence[curpos]]+M[thisword][sentence[curpos]]+recSolve(curpos+1,thisword);if(ret<cand){ret=cand;choose=thisword;}}}else{for(intthisword=0;thisword<m;thisword++){doublecand=T[prevword][thisword]+M[thisword][sentence[curpos]]+recSolve(curpos+1,thisword);if(ret<cand){ret=cand;choose=thisword;}}}returnret;}stringreconstruct(intcurpos,intprevword){intchoose=choice[curpos][prevword];assert(choose!=-1);stringret=words[choose];if(curpos<n-1){ret=ret+" "+reconstruct(curpos+1,choose);}returnret;}stringSolve(){recSolve(0,0);returnreconstruct(0,0);;}intmain(){cin>>m>>q;for(inti=0;i<m;i++){cin>>words[i];}//B입력for(inti=0;i<m;i++){doublet;cin>>t;B[i]=log(t);}//T입력for(inti=0;i<m;i++){for(intj=0;j<m;j++){doublet;cin>>t;T[i][j]=log(t);}}//M입력for(inti=0;i<m;i++){for(intj=0;j<m;j++){doublet;cin>>t;M[i][j]=log(t);}}for(inti=0;i<q;i++){//캐시,choice초기화for(inti=0;i<101;i++){for(intj=0;j<502;j++){cache[i][j]=1.0;choice[i][j]=-1;}}cin>>n;for(intj=0;j<n;j++){stringinputword;cin>>inputword;for(intk=0;k<m;k++){if(inputword==words[k]){sentence[j]=k;break;}}}cout<<Solve()<<endl;}return0;}
takun612
질문 내용
책보면서 열심히 문제풀이를 하는데, 막혔습니다
아래 코드에 보시면 reconstruct 함수 내에 assert(choose != -1);을 넣었는데, 제출해보면 assert에 의해서 중단됩니다. 그런데 왜 choose가 바뀌지 않는지/바뀌지 않은 choose에 접근하는지 도통 모르겠습니다. 도와주세요!!
코드
8년 전