COINS 문제 질문 드립니다. (디버깅) gloryof11 COINS 안녕하세요. 오랜만에 도전을 하고 있는데, COIN 문제의 오답 원인을 찾지 못하고 있습니다.. 아래 코드에서 어떤 부분이 문제가 될 수 있는지 고수님들의 조언 부탁드립니다... (거의 온것 같은데,, 어렵네요....) #include <stdio.h> int T; // 1<=T<=100 int M; // 1<=M<=5000 int C; // 1<=C<=100 , the biggest coin is 5000 int CDATA[100]; // max is 100 int ANSWER; int memo[5000][100]; int z; int find(int M, int maxidx) { int cnt = 0; // condition for end if(M == 0) return 1; else if (M < 0) return 0; // memoization if(memo[M][maxidx] != 0) return memo[M][maxidx]; // recursive function for(int i=0;i<C;i++) { if(CDATA[i] <= CDATA[maxidx] && M-CDATA[i]>=0) cnt = cnt + find(M-CDATA[i],i); } // problem's limitation cnt = cnt % 1000000007; // memoization memo[M][maxidx] = cnt; return cnt; } int main(void) { int max =0; int maxidx = 0; scanf("%d", &T); for(int i=0;i<T;i++) { // init ANSWER = 0; z = 0; max = 0; // input scanf("%d %d", &M, &C); for(int j=0;j<C;j++) { int temp; int flag = 0; scanf("%d", &temp); for(int k=0;k<j;k++) { if(CDATA[k] == temp) flag = 1; } if(flag == 0) { CDATA[z] = temp; z++; } } // input correction C = z; if(M == 0) { printf("%d\n",M); for(int j=0;j<5000;j++) for(int k=0;k<C;k++) memo[j][k] = 0; continue; } // find biggest coin for(int j=0;j<C;j++) { if(max<CDATA[j]) { max = CDATA[j]; maxidx = j; } } printf("%d\n",find(M,maxidx)); // init for(int j=0;j<5000;j++) for(int k=0;k<C;k++) memo[j][k] = 0; } return 0; } 10년 전
2개의 댓글이 있습니다. Namnamseo // recursive function for(int i=0;i<C;i++) { if(CDATA[i] <= CDATA[maxidx] && M-CDATA[i]>=0) cnt = cnt + find(M-CDATA[i],i); } 이 부분에서 이미 오버플로가 나는 경우도 있지 않을까요? 10년 전 link gloryof11 날카롭고 적절한 조언에 감사드립니다. (저는 아직도 가야할 길이 많이 남은 것 같습니다;) 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
gloryof11
COINS
안녕하세요. 오랜만에 도전을 하고 있는데, COIN 문제의 오답 원인을 찾지 못하고 있습니다..
아래 코드에서 어떤 부분이 문제가 될 수 있는지 고수님들의 조언 부탁드립니다... (거의 온것 같은데,, 어렵네요....)
10년 전