当前位置: 首页 > news >正文

AcWing 11 背包问题求方案数

 代码写的字数比较多, 但是感觉还挺好理解的

#include <bits/stdc++.h>
#define int long long#define F(i, a, b) for (int i = (a); i <= (b); i++)
#define dF(i, a, b) for (int i = (a); i >= (b); i--)using namespace std;typedef long long ll;
typedef pair<int, int> pii;const int N = 1005, M = (N << 1), inf = 1e16, mod = 1e9 + 7;int n, m, k, x, y, z, ans, t;
int v[N], w[N], f[N][N], f2[N][N];void solve()
{cin >> n >> m;for (int i = 1; i <= n; i ++ ){cin >> v[i] >> w[i];}for (int i = 0; i <= m; i ++ ){f2[0][i] = 1;}for (int i = 1; i <= n; i ++ ){for (int j = m; j >= 0; j -- ){f[i][j] = f[i - 1][j];f2[i][j] = f2[i - 1][j];if (j < v[i]) continue;if (f[i][j] == f[i - 1][j - v[i]] + w[i]){f[i][j] = f[i - 1][j];f2[i][j] = (f2[i][j] + f2[i - 1][j - v[i]]) % mod;}else if (f[i][j] < f[i - 1][j - v[i]] + w[i]){f[i][j] = f[i - 1][j - v[i]] + w[i];f2[i][j] = f2[i - 1][j - v[i]];}else{f[i][j] = f[i - 1][j];f2[i][j] = f2[i - 1][j];}}}cout << f2[n][m] << endl;
}signed main()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T = 1;
//	cin >> T;while (T -- ){solve();}
}


http://www.mrgr.cn/news/56456.html

相关文章:

  • 排序算法 —— 快速排序(理论+代码)
  • Lua中的goto语句
  • 学习threejs,通过THREE.Raycaster给模型绑定点击事件
  • C++之函数模板(还差拓展阅读)
  • ros2 action server示例、拓展、练习
  • Redis架构演进之单机版Redis和数据持久化
  • MybatisPlus入门(一)MybatisPlus简介
  • 字节流写入文件
  • 理解CPU怎么执行一条指令
  • 【flask web】 Blueprint 蓝图 路由模块化
  • 2、图像的特征
  • 技术经济学·技术经济分析指标体系与基本原则
  • 在金融领域,机器学习算法优化的成功案例有哪些?
  • 【C++复习】Map Set HashMap HashSet的模拟实现{代码分享}
  • 马拉车算法(C/C++)
  • 3184. 构成整天的下标对数目 I
  • 车规芯片SOC简介
  • web服务器介绍
  • 图文深入理解Oracle Total Recall
  • 【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应
  • GJS-WCP
  • [ 钓鱼实战系列-基础篇-5 ] 一篇文章教会你用红队思维设计钓鱼模板(附常见的钓鱼邮件模板)
  • Tcp协议讲解与守护进程
  • Docker基础知识教程(最详细最全)
  • Android 拦截第三方推送的通知消息或系统消息或通知栏
  • 【C++、数据结构】二叉排序树(二叉查找树、二叉搜索树)(图解+完整代码)