要点

  • 假设第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;
}

Codeforces 1132E(转化+dp)的更多相关文章

  1. Codeforces 55D (数位DP+离散化+数论)

    题目链接: http://poj.org/problem?id=2117 题目大意:统计一个范围内数的个数,要求该数能被各位上的数整除.范围2^64. 解题思路: 一开始SB地开了10维数组记录情况. ...

  2. codeforces 682D(DP)

    题目链接:http://codeforces.com/contest/682/problem/D 思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列 ...

  3. codeforces 666A (DP)

    题目链接:http://codeforces.com/problemset/problem/666/A 思路:dp[i][0]表示第a[i-1]~a[i]组成的字符串是否可行,dp[i][1]表示第a ...

  4. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  5. Codeforces 264B 数论+DP

    题目链接:http://codeforces.com/problemset/problem/264/B 代码: #include<cstdio> #include<iostream& ...

  6. CodeForces 398B 概率DP 记忆化搜索

    题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...

  7. CodeForces 512B(区间dp)

    D - Fox And Jumping Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  8. CodeForces - 1051D Bicolorings(DP)

    题目链接:http://codeforces.com/problemset/problem/1051/D 看了大佬的题解后觉着是简单的dp,咋自己做就做不来呢. 大佬的题解:https://www.c ...

  9. Codeforces 1110D Jongmah [DP]

    洛谷 Codeforces 我-我我把这-这这题切了??? 说实话这题的确不难,只是我看到有大佬没做出来有点慌-- 突然发现这题是我在洛谷的第500个AC呢.那就更要写篇题解纪念一下了. 思路 容易想 ...

随机推荐

  1. 动态区间第K大

    整体二分. 主要需要注意的一点是,对于每个删除操作,若删除操作被算入贡献,则最开始的插入操作也一定会被算入,所以不必担心删除删错. #include<cstdio> #include< ...

  2. LightOJ - 1104 Birthday Paradox —— 概率

    题目链接:https://vjudge.net/problem/LightOJ-1104 1104 - Birthday Paradox    PDF (English) Statistics For ...

  3. Codeforces Beta Round #88 C. Cycle —— DFS(找环)

    题目链接:http://codeforces.com/problemset/problem/117/C C. Cycle time limit per test 2.5 seconds memory ...

  4. Nagios监控Windows的网卡流量

    Nagios监控Windows的网卡流量 使用/usr/local/nagios/libexec/中的check_traffic.sh,不但可以监控Linux的网卡流量,也可以监控Windows服务器 ...

  5. mysql函数之八:mysql函数大全

    对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql& ...

  6. C# ActiveX 中static变量缓存的问题

    最近在忙活一个绘图程序,按照要求需要以ActiveX的方式发布在网站中,这个绘图程序的大概功能就是从数据库获取数据,成图.发布后用户反映,数据变化后,图形没有发生变化,好像有缓存,如果把浏览器全部关闭 ...

  7. wp8环境搭建

    Windows Phone 8将采用与Windows 8相同的NT内核,这就意味着WP8将可能兼容Win8应用,开发者仅需很少改动就能让应用在两个平台上运行.由于内核变更,Windows Phone  ...

  8. 技术胖Flutter第四季-19导航父子页面的跳转返回

    技术胖Flutter第四季-19导航父子页面的跳转返回 博客地址: https://jspang.com/post/flutter4.html#toc-010 onPressed是当前按下的时候,按下 ...

  9. Eclipse中建立自己的类库,给不同的工程使用

    win7 进入服务 开始 运行 services.msc 在多个工程当中,可能使用到相同的jar包,这时,如果我们建立一个自己的类库,该类库中存放着所有工程均需要的jar包,就可以免去重复导入的麻烦. ...

  10. 数据可视化-svg入门基础(二)

    接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等. svg是(scalable vector graphic)伸缩矢量图像. 一.目录 (1)图形元素 (2)文 ...