나는이 작업에 문제가있다. http://www.spoj.com/problems/LINEUP/ 꽤 쉽지만 내 솔루션이 실패합니다. 나는 잘못된 결과를 얻고있다. 누구든지 알아낼 수 있습니까? 어떤 도움을 주셔서 대단히 감사합니다. :-)비트 마스크 - SPOJ LINEUP 틀린 대답
#include <cstdio>
#include <string.h>
using namespace std;
int n;
int prob[21][21];
char vec_rijesio[1<<13];
int memo[1<<13];
int rijesi(int d, int s) {
if (d == 11)
{
return 0;
}
if (vec_rijesio[s]) return memo[s];
vec_rijesio[s] = 1;
int &ret = memo[s];
ret = 0;
for (int i=0; i<11; ++i)
if ((s & (1<<i)) == 0) {
int tmp = prob[d][i] + rijesi(d + 1, s|(1<<i));
if (tmp > ret) ret = tmp;
}
return ret;
}
int main() {
scanf("%d", &n);
for(int o=0;o<n;++o)
{
for (int i=0; i<11; ++i)
for (int j=0; j<11; ++j) {
int x;
scanf("%d", &x);
prob[i][j] = x;
}
int ret = rijesi(0, 0);
printf("%d\n", ret);
memset (memo,0,sizeof(memo));
memset (vec_rijesio,0,sizeof(vec_rijesio));
}
return 0;
}
코드가 올바른 결과를 내지 못하는 입력 (실제 및 예상 출력과 함께)을 입력해야합니다. – Dukeling