共63道题,当前是第60

Description

1 	#include <bits/stdc++.h>
2 	using namespace std;
3	int w[35000], d[35000], dp[35000];
4	int main(){
5		int n, m;
6		scanf("%d%d", &n, &m);
7		for (int i = 1; i <= n; ++i)
8			scanf("%d%d", &w[i], &d[i]);
9		for (int i = 1; i <= n; ++i){
10			for (int j = m; j >= w[i]; j--){
11				dp[j] = max(dp[j], dp[j - w[i]] + d[i]);
12			}
13		}
14		printf("%d\n", dp[m]);
15		return 0;
16	}

1.    F。若更改则变为完全背包,显然不正确。

2.    T。容易知道物品的枚举顺序没有影响。

3.    T。30000*30000<=INT_MAX ,不会溢出。

4.    D。

5.    D。判断方法同上。

6.    C。复杂度上限决定于枚举物品及体积的循环,易知答案为O(nm)

Question

上述代码中,双重循环里循环变量 $j$ 的枚举顺序改为从 $w[i]$ 到 $m$,输出结果一定不变。( )

上述代码中,双重循环中变量 $i$ 的枚举顺序改为从 $n$ 到 $1$,输出结果一定不变。( )

若输入数据中,$1 \leq n \leq 30000, 1 \leq m \leq 30000, 1 \leq w[i] \leq 30000, 1 \leq d[i] \leq 30000$,则所求答案一定没有溢出。( )

当输入为:

4 6

1 4

2 6

3 12

2 7

输出为(  )

若输入数据中,$1 \leq n \leq 30000, 1 \leq m \leq 30000, 1 \leq w[i] \leq 30000$,下列给出的 $d[i]$ 的范围,哪个选项所求答案有可能会超出 $INT$ 的范围( )

上述代码的时间复杂度为( )