https://codeforces.com/contest/1132/problem/E

题意

有8种物品,重量是1~8,每种数量是\(cnt[i]\)(1e16),问容量为W(1e18)的背包最多能装多少重量

题解1

  • 多重背包二进制拆分物品转换成01背包,用map来剪枝掉无用的状态
#include<bits/stdc++.h>
#define ll long long
using namespace std;
map<ll,bool>f,g;
ll a[10],W,s[1005],ans;
vector<ll>w; int main(){
cin>>W;
for(ll i=1;i<=8;i++){
cin>>a[i];
if(a[i]){
ans=max(ans,min(W/i,a[i])*i);
ll num=1;
while(a[i]>0){
w.push_back(min(num,a[i])*i);
a[i]-=min(num,a[i]);
num*=2;
}
}
}
sort(w.begin(),w.end());
reverse(w.begin(),w.end());
for(int i=w.size()-1;i>=0;i--)s[i]=s[i+1]+w[i];
f[0]=true;
for(int i=0;i<w.size();i++){
g.clear();
for(map<ll,bool>::iterator it=f.begin();it!=f.end();it++){
ll x=it->first;
g[x]=true;
if(x+w[i]<=W)g[x+w[i]]=true;
}
f.clear();
for(map<ll,bool>::iterator it=g.begin();it!=g.end();it++){
ll x=it->first;
if(x+s[i]<ans)continue;
f[x]=true;
ans=max(ans,x);
}
}
cout<<ans;
}

题解2

参考:https://blog.csdn.net/qq_37451344/article/details/88860699

  • 设1到8的最小公倍数为lcm,则将lcm/V[i]看成一整份,然后枚举0到lcm/V[i]作为第二维
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll lcm=840;
ll W,a[10],V[10],dp[10][10005],ans;
int main(){
cin>>W;
for(int i=0;i<8;i++){
cin>>a[i];
V[i]=i+1;
}
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(int i=0;i<8;i++){
ll num=lcm/V[i];
ll end=min(num,a[i]);
for(int j=0;j<=lcm*8;j++){
if(dp[i][j]<0)continue;
for(int k=0;k<=end;k++){
if(j+k*V[i]<=lcm*8)dp[i+1][j+k*V[i]]=max(dp[i+1][j+k*V[i]],
dp[i][j]+(a[i]-k)/num);
}
}
}
for(int i=0;i<=lcm*8;i++){
if(i>W)break;
if(dp[8][i]<0)continue;
ans=max(ans,i+lcm*min(dp[8][i],(W-i)/lcm));
}
cout<<ans;
}

Educational Codeforces Round 61 (Rated for Div. 2) E 多重背包优化的更多相关文章

  1. Educational Codeforces Round 61 (Rated for Div. 2) D,F题解

    D. Stressful Training 题目链接:https://codeforces.com/contest/1132/problem/D 题意: 有n台电脑,每台电脑都有初始电量ai,也有一个 ...

  2. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...

  3. Educational Codeforces Round 61 (Rated for Div. 2)

    A. Regular Bracket Sequence 题意:给出四种括号的数量 ((  )) ()  )( 问是否可以组成合法的序列(只能排序不能插在另外一个的中间) 思路: 条件一:一个或 n个) ...

  4. Educational Codeforces Round 61 (Rated for Div. 2) E. Knapsack

    非常经典的dp题,因为1至8的最大公约数是840,任何一个数的和中840的倍数都是可以放在一起算的, 所以我只需要统计840*8的值(每个数字(1-8)的sum%840的总和),剩下都是840的倍数 ...

  5. Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)

    #include<bits/stdc++.h>using namespace std;int st[1000007];int top;int s[1000007],t[1000007];i ...

  6. Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)

    #include<bits/stdc++.h>typedef long long ll;const int inf=0x3f3f3f3f;using namespace std;char ...

  7. Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)

    #include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...

  8. Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements (思维,前缀和)

    Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements time limit per test 1 se ...

  9. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

随机推荐

  1. sql 合并结果集数据

    起因:项目上查询一些数据,需要将查询后的结果合并到一列中. 1.STUFF函数 官方api: https://docs.microsoft.com/zh-cn/sql/t-sql/functions/ ...

  2. MMM的又一周计划[2019 7.1→2019.7.7]

    发现今天是7.1然后又是星期一 来一发吧 本周目标: 1.二分图最佳匹配 2.网络流 3.HH的项链 4.洛谷rk前1000(目前1.1k) (upd:469) 5.AC260(35题,上周A了34, ...

  3. Easyui datagrid扩展子网格detailview增删改查详解

    话不多gang,先上代码,将以下三个属性插入主网格的初始化参数中: view : detailview, //1 detailFormatter : function(index, row) { // ...

  4. RHCE实验记录总结-2-RHCE

    RHCSA实验总结-点击跳转 RHCE实验 RHCE这边我简单分了下类: ## 网络与安全 1. IPv6 设置(推荐使用GUI程序 nm-connection-editor来完成) 2. team ...

  5. IDEA的常用配置(Maven)一键导入及优化内存

    IDEA的常用配置一键导入 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如图的压缩包 下载完成后解压缩,点击settings_bak,你会看 ...

  6. ExcelHelper based on NPOI

    //Export data to excel via NPOI public static void ExportDataTableToExcel(DataTable dataTable, strin ...

  7. PIE调用Python获得彩色直方图

    前段时间我一直在研究PIE SDK与Python的结合,因为在我的开发中,我想获取一张图片的统计直方图,虽然在SDK中有提供关于直方图的类接口(如IStatsHistogram 接口.Histogra ...

  8. ICSharpCode.SharpZipLib 中文乱码问题

    今天在调用ICSharpCode.SharpZipLib解压zip文件时出现了中文文件乱码的问题. 解决过程如下: 1.判断是否压缩包本身问题.经查zip文件夹在本地直接解压打开时正确的中文名称,所以 ...

  9. 反射与类对象获取-Java学习

    类对象 类对象指的是一个类在jvm中加载后所形成的对象,每一个类都只有一个类对象,该类对象被所有的实例对象所共享. 类之间有不同的方法,不同的属性.类对象,就是用于描述这种类,都有什么属性,什么方法的 ...

  10. SpringBoot+vue整合websocket

    0.引言 这里我先说下,网上对于websocket的解释有一堆不懂自己查,我这就不做原理解释,只上代码. 1.SpringBoot引入websocket maven 依赖 <dependency ...