結果
| 問題 |
No.3329 Only the Rightest Choice is Right!!!
|
| コンテスト | |
| ユーザー |
pengin_2000
|
| 提出日時 | 2025-11-01 15:17:13 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 26 ms / 1,571 ms |
| コード長 | 770 bytes |
| コンパイル時間 | 408 ms |
| コンパイル使用メモリ | 27,728 KB |
| 実行使用メモリ | 36,844 KB |
| 最終ジャッジ日時 | 2025-11-02 16:31:39 |
| 合計ジャッジ時間 | 3,273 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 74 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:8:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
8 | scanf("%d %d", &n, &W);
| ^~~~~~~~~~~~~~~~~~~~~~
main.c:11:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
11 | scanf("%d", &v[i]);
| ^~~~~~~~~~~~~~~~~~
main.c:13:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
13 | scanf("%d", &w[i]);
| ^~~~~~~~~~~~~~~~~~
ソースコード
#include<stdio.h>
int v[3003], w[3003];
int dp[3003][3003];
int ans[3003], aa;
int main()
{
int n, W;
scanf("%d %d", &n, &W);
int i, j, k;
for (i = 0; i < n; i++)
scanf("%d", &v[i]);
for (i = 0; i < n; i++)
scanf("%d", &w[i]);
for (j = 0; j <= W; j++)
dp[n][j] = 0;
for (i = n - 1; i >= 0; i--)
{
for (j = 0; j <= W; j++)
dp[i][j] = dp[i + 1][j];
for (j = 0; j + w[i] <= W; j++)
if (dp[i][j] < v[i] + dp[i + 1][j + w[i]])
dp[i][j] = v[i] + dp[i + 1][j + w[i]];
}
aa = 0;
int V = dp[0][0], R = 0, f;
for (k = -1; V > 0;)
{
for (i = k + 1; dp[i][R] == V; i++);
k = i - 1;
ans[aa++] = k + 1;
V -= v[k];
R += w[k];
}
printf("%d\n", aa);
for (i = 0; i < aa - 1; i++)
printf("%d ", ans[i]);
printf("%d\n", ans[i]);
return 0;
}
pengin_2000