結果
問題 | No.617 Nafmo、買い出しに行く |
ユーザー | michonz4 |
提出日時 | 2019-12-26 14:46:05 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 66 ms / 2,000 ms |
コード長 | 1,361 bytes |
コンパイル時間 | 393 ms |
コンパイル使用メモリ | 29,568 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-04 05:57:52 |
合計ジャッジ時間 | 1,418 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 1 ms
5,248 KB |
testcase_03 | AC | 4 ms
5,248 KB |
testcase_04 | AC | 1 ms
5,248 KB |
testcase_05 | AC | 8 ms
5,248 KB |
testcase_06 | AC | 63 ms
5,248 KB |
testcase_07 | AC | 64 ms
5,248 KB |
testcase_08 | AC | 1 ms
5,248 KB |
testcase_09 | AC | 1 ms
5,248 KB |
testcase_10 | AC | 61 ms
5,248 KB |
testcase_11 | AC | 62 ms
5,248 KB |
testcase_12 | AC | 62 ms
5,248 KB |
testcase_13 | AC | 65 ms
5,248 KB |
testcase_14 | AC | 66 ms
5,248 KB |
testcase_15 | AC | 1 ms
5,248 KB |
testcase_16 | AC | 1 ms
5,248 KB |
testcase_17 | AC | 1 ms
5,248 KB |
testcase_18 | AC | 1 ms
5,248 KB |
testcase_19 | AC | 1 ms
5,248 KB |
testcase_20 | AC | 1 ms
5,248 KB |
testcase_21 | AC | 1 ms
5,248 KB |
ソースコード
/* 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 <stdio.h> int main() { int n, k, arrSize=0; scanf("%d %d", &n, &k); int arr[n], t; for (int i=0; i<n; i++) { scanf("%d", &t); if (t<=k) arr[arrSize++]=t; } int max=0; for (int combination=1; combination<(1<<arrSize); combination++) { int sum=0; for (int i=0; i<arrSize; i++) { if (combination&(1<<i)) { sum+=arr[i]; if (sum>k) break; } } if (sum<=k) max=(max>sum ? max: sum); } printf("%d\n", max); return 0; }