要点

  • 假设第i个最后总共选的值为ci,不妨把它分成两部分:$$c_i=cnt'_iL+q_i$$$$L=840,\ 0<=q_i<L$$又可以写成:$$c_i=cnt_1i+cnt_2i$$$$cnt_i'=\frac{cnt_1}{\frac{L}{i}},\ q_i=cnt_2i$$所以$$maxcnt'_i=\frac{cnt[i]-cnt_2}{\frac{L}{i}}$$一会dp要用。
  • 事实上如果只有一个item的话,L取它的倍数即可;而8个数我们为了将它们合在一起算,所以取一个它们的LCM。这样做的目的是$$ans=L\sum_{i=1}8{cnt'_i}+\sum_{i=1}8{q_i}$$而此时$$0<=q_i<=8L$$这个值并不大,我们就可以dp做了。
  • 设dp[i][j]:在前i个数中取、全部的qi为j时,最多的cnt'。这样最后就既有qi又有cnt',可以直接算出答案。
  • 精简dfs做的大佬tql,学不来学不来……
const int N = 9;
const int L = 840; ll W, cnt[N], dp[N][L * N]; int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> W;
rep(i, 1, 8) cin >> cnt[i]; memset(dp, -1, sizeof dp);
dp[0][0] = 0;
rep(fakei, 0, 7) {
rep(j, 0, L * fakei) {
if (dp[fakei][j] >= 0) {
int i = fakei + 1;
rep(k, 0, min(cnt[i], (ll)(L / i))) {
dp[i][j + k * i] = max(dp[i][j + k * i], dp[fakei][j] + (cnt[i] - k) / (L / i));
}
}
}
} ll ans = 0;
rep(j, 0, L * 8) {
if (j > W) break;
if (dp[8][j] >= 0) {
ans = max(ans, min(dp[8][j], (W - j) / L) * L + j);
}
}
cout << ans << endl;
return 0;
}

最新文章

  1. 如何在个人博客引擎 Hexo 中添加 Swiftype 搜索组件
  2. 【java基础学习二】 数组相互转换,转成用逗号隔开的字符串等
  3. javascript-binarySearch
  4. error while loading shared libraries: libXXX.so.x: cannot open shared object file: No such file or directory .
  5. Prime Factory
  6. 或许您还不知道的八款Android开源游戏引擎
  7. ios开发之网络数据的下载与上传
  8. oracle tns in linux
  9. 简单模拟java动态动态代理机制的底层实现原理
  10. word 中Sentences、Paragraph等含义和用法
  11. win7限制登录时间的设置方法
  12. window 配置 sendmail
  13. jQuery对象与DOM对象的互相转换
  14. nopCommerce 3.3正式发布及新增功能改进
  15. 在Ubuntu下直接通过SSH登录到OpenWrt
  16. ORACLE 博客文章目录
  17. Linux删除隐藏文件
  18. vue命令行错误处理
  19. jmeter如何链接数据库并拿到相应值用到请求中
  20. http标码集合

热门文章

  1. DHCP request error:Timed out waiting for dhcpcd to start【转】
  2. Linux - Unix环境高级编程(第三版) 源代码编译(即头文件apue.h如何使用问题)【转】
  3. codeforces B. Roma and Changing Signs 解题报告
  4. RAC环境下oracle实例启动问题:ora-01565,ora-17503
  5. get_extension_funcs 返回某个模块下的所有函数
  6. C++之构造函数、参数列表、析构函数
  7. Building Objective-C static libraries with categories(ObjC、all_load、force_load)
  8. 安装和配置Rose HA
  9. ceph与openstack对接(cinder、glance、nova)
  10. CS231n 2016 通关 第三章-SVM 作业分析