试中有 n 种类型的题目。给你一个整数 target 和一个下标从 0 开始的二维整数数组 types ,其中 types[i] = [counti, marksi] 表示第 i 种类型的题目有 counti 道,每道题目对应 marksi 分。 返回你在考试中恰好得到 target 分的方法数。由于答案可能很大,结果需要对 109 +7 取余。 注意,同类型题目无法区分。 比如说,如果有 3 道同类型题目,那么解答第 1 和第 2 道题目与解答第 1 和第 3 道题目或者第 2 和第 3 道题目是相同的。
时间: 2023-03-27 20:05:09 浏览: 50
这是一道算法题,根据给定的信息,可以使用动态规划来解决。具体来说,可以定义一个二维数组 dp,其中 dp[i][j] 表示考虑前 i 种类型的题目,得分为 j 的方案数。那么,对于第 i 种类型的题目,可以考虑选或不选,如果不选,则 dp[i][j] = dp[i-1][j],如果选,则 dp[i][j] = dp[i][j-marksi] * counti + dp[i-1][j],其中 marksi 表示第 i 种类型的题目每道题目对应的分数。最终的答案即为 dp[n][target],其中 n 表示题目的种数。
需要注意的是,由于答案可能很大,需要对 10^9+7 取模。
相关问题
c语言移动一维数组中的内容:若数组中有n个整数,要求把下标从0到p()
移动到数组末尾,即下标从p+1到n-1的整数放到下标从0到n-p-1的位置上,下标从0到p的整数放到下标从n-p到n-1的位置上,实现该操作的C语言代码如下:
```c
void moveArray(int arr[], int n, int p) {
// 定义一个临时数组,用于存储下标从0到p的整数
int temp[p+1];
for (int i = 0; i <= p; i++) {
temp[i] = arr[i];
}
// 将下标从p+1到n-1的整数移动到下标从0到n-p-1的位置上
for (int i = p+1; i < n; i++) {
arr[i-p-1] = arr[i];
}
// 将临时数组中的整数移动到下标从n-p到n-1的位置上
for (int i = 0; i <= p; i++) {
arr[n-p-1+i] = temp[i];
}
}
```
其中,`arr`是要移动的数组,`n`是数组的长度,`p`是要移动的下标。函数中先定义一个临时数组`temp`,用于存储下标从0到p的整数。然后将下标从p+1到n-1的整数移动到下标从0到n-p-1的位置上,最后将临时数组中的整数移动到下标从n-p到n-1的位置上。
给定整数数组nums和一个目标值target 在数组中找出和为目标值的两个整数 返回数组下标
题目描述:
给定一个整数数组 nums 和一个目标值 target,请在数组中找出和为目标值的两个整数,返回它们的数组下标。
示例:
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。
思路:
暴力枚举法:对于每一个数,遍历整个数组,查找另一个数是否与它的和为目标值。
哈希表法:遍历数组,将每个数及其下标存储在哈希表中,同时查找哈希表中是否存在目标值减去当前数的差值。
代码实现:
暴力枚举法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if (nums[i] + nums[j] == target) {
res.push_back(i);
res.push_back(j);
return res;
}
}
}
return res;
}
};
哈希表法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
if (map.find(target - nums[i]) != map.end()) {
res.push_back(map[target - nums[i]]);
res.push_back(i);
return res;
}
map[nums[i]] = i;
}
return res;
}
};