关注
按喜好程度排序, 每次按取的件数和当前花费金额分类记录, 剩下普通零食按完全背包更新就可以了, 这是后来改的, 不一定完全正确, 欢迎讨论..觉得不错的点个赞呗 #include<bits/stdc++.h>
using namespace std;
vector<int> f;
bool cmp(const int& a, const int& b) {
return f[a] < f[b];
}
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;
f = vector<int>(n, n);
for (int i = 0; i < m; i++) {
cin >> t;
f[t - 1] = i;
}
sort(a.begin(), a.end(), cmp);
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;
}
查看原帖
点赞 13
相关推荐
点赞 评论 收藏
分享
notbeentak...:就抓,嗯抓,开不开匿名都要抓,一点坏事不让说,就对公司顶礼膜拜佩服的五体投地就对了 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你想跟着什么样领导? #
5495次浏览 82人参与
# 什么样的背景能拿SSP? #
117279次浏览 410人参与
# 百度秋招 #
55962次浏览 394人参与
# 你的秋招白月光和意难平公司 #
7068次浏览 81人参与
# 分享一个让你热爱工作的瞬间 #
47434次浏览 412人参与
# 找实习是选平台还是选业务? #
10231次浏览 147人参与
# 从夯到拉,评价编程语言 #
5019次浏览 48人参与
# 秋招签约后的心态变化 #
106060次浏览 923人参与
# 职场吐槽大会 #
289724次浏览 2111人参与
# 每个月花钱最多的地方是? #
5279次浏览 76人参与
# xxx岗位的一天 #
10048次浏览 92人参与
# 作业帮求职进展汇总 #
77641次浏览 520人参与
# 十一月总结 #
13353次浏览 146人参与
# 你面试时吹过最大的牛 #
20241次浏览 116人参与
# 为什么国企只招应届生 #
218450次浏览 1262人参与
# 饿了么求职进展汇总 #
80268次浏览 684人参与
# 非技术求职现状 #
549501次浏览 3509人参与
# 实习学到最有价值的工作习惯 #
43615次浏览 378人参与
# 韶音科技求职进展汇总 #
64995次浏览 510人参与
# AI“智障”时刻 #
6041次浏览 54人参与
# 实习生如何通过转正 #
111744次浏览 1421人参与
