关注
果然讨论有助于发现问题, 上面开始的排序写错了 重新改了如下 #include<bits/stdc++.h>
using namespace std;
int main(){
int m, n, v, t;
while (cin >> v >> n) {
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> m;
vector<int> f(n);
for (int i = 0; i < m; i++) {
cin >> t;
f[i] = a[t - 1];
a[t - 1] = -1;
}
for (int i = 0, j = m; j < n; i++) {
if (a[i] > 0) {
f[j++] = a[i];
}
}
a = move(f);
vector<vector<int> > dp(v / a[0] + 1, vector<int>(v + 1, 0));
int res = 0;
// 先挑选最喜欢的零食, 无约束
for (int i = 0; i < v / a[0] + 1; i++) {
dp[i][i * a[0]] = 1;
}
// 按喜欢程度依次挑选其他特别喜欢的零食,
for(int i = 1; i < m; i++) {
vector<vector<int>> t = move(dp);
int size = v / a[i] + 1;
dp = vector<vector<int> >(size, vector<int>(v + 1, 0));
for (int j = 1; j < t.size(); j++) {
// 每次取的要比前一种要少
for (int k = min(size - 1, j - 1); k >= 0; k--) {
for (int l = k * a[i]; l <= v; l++){
dp[k][l] = (dp[k][l] + t[j][l - k * a[i]]) % 10000007;
}
}
}
}
// 统计各花费的方案数
vector<int> cur(v + 1, 0);
for (int i = 0; i <= v; i++) {
for (int j = 0; j < dp.size(); j++) {
cur[i] = (cur[i] + dp[j][i]) % 10000007;
}
}
// 按完全背包更新其余零食
for (int i = m; i < n; i++) {
for (int j = a[i]; j <= v; j++) {
cur[j] = (cur[j] + cur[j - a[i]]) % 10000007;
}
}
cout << cur[v] << endl;
}
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
01-21 04:38
中国矿业大学 大数据开发工程师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客吐槽大会 #
10828次浏览 198人参与
# 帆软软件工作体验 #
10564次浏览 49人参与
# 软开人,秋招你打算投哪些公司呢 #
176959次浏览 1328人参与
# 秋招被挂春招仍然能投的公司 #
22205次浏览 216人参与
# 机械制造2024笔面经 #
1515335次浏览 12994人参与
# 1月小结:你过的开心吗? #
5308次浏览 131人参与
# 实习,不懂就问 #
157709次浏览 1379人参与
# AI求职实录 #
17683次浏览 404人参与
# 没关系,至少我的__很曼妙 #
12655次浏览 219人参与
# 今年春招是金一银二嘛? #
29729次浏览 284人参与
# 秋招被确诊为…… #
286668次浏览 1595人参与
# 聊聊你的职场新体验 #
316790次浏览 1857人参与
# 快手年终开大包 #
4038次浏览 57人参与
# 抛开难度不谈,你最想去哪家公司? #
16525次浏览 242人参与
# 为什么有人零实习也能进大厂? #
15668次浏览 277人参与
# 你的第一家实习公司是什么档次? #
13601次浏览 176人参与
# 如果能重来,就业or读研你选哪个? #
271382次浏览 2611人参与
# 赚钱的意义在这一刻具象化 #
11898次浏览 240人参与
# 考研人,我有话说 #
164116次浏览 1243人参与
# Prompt分享 #
18591次浏览 444人参与

查看26道真题和解析