/* No.617 Nafmo、買い出しに行く */ /* arr[]={1, 2, 3, 5}; 4種類の値(n)の組み合わせをbitで表現: 2*2*2*2=16 combination=0 < combination=16 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 論理積で1になった部分がそのiターンの重さになる, iターン内のiを合計してk以下なら解答の候補 i=0 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 i=1 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 i=2 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 i=3 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 iターンが終了したところでiターンの合計値sumとmaxを比較して最大値を保持する */ #include int main() { int n, k, arrSize=0; scanf("%d %d", &n, &k); int arr[n], t; for (int i=0; ik) break; } } if (sum<=k) max=(max>sum ? max: sum); } printf("%d\n", max); return 0; }