Educational Codeforces Round 61 (Rated for Div. 2) E. Knapsack
2024-08-24 18:29:35
非常经典的dp题,因为1至8的最大公约数是840,任何一个数的和中840的倍数都是可以放在一起算的,
所以我只需要统计840*8的值(每个数字(1-8)的sum%840的总和),剩下都是840的倍数
dp[i][j] 代表讨论了第i位并且每个数字取余为j的情况
#include <assert.h>
#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <ctime>
#include <time.h>
using namespace std;
const int N = 2e5 + 5;
const int INF = 0x3f3f3f3f;
typedef long long ll;
ll a[10];
ll dp[10][8400];
int main() {
ll w;
while(~scanf("%lld", &w)) {
for(int i = 0; i < 8; ++i) {
scanf("%lld", &a[i]);
}
memset(dp, -1, sizeof(dp));
dp[0][0] = 0;
for(int i = 0; i < 8; ++i) {
for(int j = 0; j < 8400; ++j) {
if(dp[i][j] == -1) continue;
int edge = min(1ll * 840 / (i + 1), a[i]);
for(int k = 0; k <= edge; ++k) {
dp[i + 1][j + k * (i + 1)] = max( dp[i + 1][j + k * (i + 1)], dp[i][j] + (a[i] - k) / (840 / (i + 1)));
}
}
}
ll ans = -1;
for(int i = 0; i < 8400; ++i) {
if(dp[8][i] == -1 || i > w) continue;
ans = max(ans, i + min( (w - i) / 840, dp[8][i]) * 840);
}
printf("%lld\n", ans);
}
return 0;
}
最新文章
- JavaScript动画知多少?
- Java你可能不知道的事(3)HashMap
- hdu5033 Building (单调栈+)
- 安装、部署... Windows服务 .net程序 安装 命令
- NODE学习:利用nodeJS去抓网页的信息
- Oracle自定义数据类型 2 (调用对象方法)
- Windows 7 Shortcuts (完整兼具分类有序,想我所想,赞!)
- ecshop 商店设置,新增或者修改字段
- delphi 写系统日志监控 转
- Typecho 代码阅读笔记(二) - 数据库访问
- fast-json.jar的用法
- Linux_Ununtu 16.04 的下载安装并部署.Net Core 网站
- BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs
- git命令行在windows中报错WARNING: terminal is not fully functional
- oracle异机恢复参考官方文档
- LeetCode算法题-Intersection of Two Linked Lists(Java实现)
- python字符串与列表的相互转换
- Android Selector 与 Shape 基本用法
- 如何获取控件id,包名,类名
- linux文件查看
热门文章
- SPH算法(求最小代价树)
- Css中路径data用法
- Cloudera Manager 4.6 安装部署hadoop CDH集群
- bootstrap datetimepicker 在 angular 项目中的运用
- 洛谷 P1073 最优贸易
- Redis的Pub/Sub客户端实现
- 理解JavaScript继承(二)
- 【转】np.linspace()、np.logspace()、np.arange()
- 1548: Design road (思维题 做法:三分找极值)
- start_kernel之前的汇编代码分析