k维背包
题目链接:E - Product Development (atcoder.jp)
因为最多为5,因此可以暴力枚举
int dp[10][10][10][10][10];
int a[110][10];
int n, k, p;
signed main()
{
for (int i1 = 0; i1 <= 5; i1++)
for (int i2 = 0; i2 <= 5; i2++)
for (int i3 = 0; i3 <= 5; i3++)
for (int i4 = 0; i4 <= 5; i4++)
for (int i5 = 0; i5 <= 5; i5++)
dp[i1][i2][i3][i4][i5] = 1145141919810;
dp[0][0][0][0][0] = 0;
cin >> n >> k >> p;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
for (int j = 1; j <= k; j++)
{
cin >> a[i][j];
}
for (int j = k + 1; j <= 5; j++)
{
a[i][j] = p;
}
for (int i1 = p; i1 >=0 ; i1--)
for (int i2 = p; i2 >=0 ; i2--)
for (int i3 = p; i3 >=0 ; i3--)
for (int i4 = p; i4 >=0 ; i4--)
for (int i5 = p; i5 >=0 ; i5--)
{
dp[min(p, i1 + a[i][1])][min(p, i2 + a[i][2])][min(p, i3 + a[i][3])][min(p, i4 + a[i][4])][min(p, i5 + a[i][5])] = min(dp[min(p, i1 + a[i][1])][min(p, i2 + a[i][2])][min(p, i3 + a[i][3])][min(p, i4 + a[i][4])][min(p, i5 + a[i][5])], dp[i1][i2][i3][i4][i5] + x);
}
}
if (dp[p][p][p][p][p] == 1145141919810)
cout << -1;
else
cout << dp[p][p][p][p][p];
}
也可以使用动态规划。没太看懂应该是状态压缩吧(jiangly)的代码
int main()
{
IOS;
int n, k, p; cin >> n >> k >> p;
vector<int> pw(k + 1);
pw[0] = 1;
for(int i = 1; i <= k; i ++)
pw[i] = pw[i - 1] * (p + 1);
vector<ll> dp(pw[k], -1ll);
dp[0] = 0;
for(int i = 0; i < n; i ++)
{
int c; cin >> c;
vector<int> a(k);
for(int j = 0; j < k; j ++) cin >> a[j];
for(int s = pw[k] - 1; s >= 0; s --)
{
int t = 0;
for(int j = 0; j < k; j ++)
{
int aa = s / pw[j] % (p + 1);
int na = min(p, aa + a[j]);
t += na * pw[j];
}
if(dp[s] != -1 && (dp[t] == -1 || dp[t] > dp[s] + c))
{
dp[t] = dp[s] + c;
}
}
}
cout << dp.back() << endl;
return 0;
}
k维背包的更多相关文章
- TOJ3596 二维背包
3596. Watch The Movie Time Limit: 2.0 Seconds Memory Limit: 65536KTotal Runs: 424 Accepted Run ...
- hdu 4501 小明系列故事——买年货_二维背包
题目:你可以有v1元,v2代金券,v3个物品免单,现在有n个商品,商品能用纸币或者代金券购买,当然你可以买v3个商品免费.问怎么最大能买多少价值 题意: 思路二维背包,dp[v1][v2][v3]=M ...
- dp 二维乃至多维背包
洛谷P1855 榨取kkksc03 分析:套路是很明显的01背包,但是这时受约束的变量有两个了,这种情况下就该用多维背包了 分析方法一样的,用dp[i][j][k]表示从前i个愿望中挑选总时间和总金钱 ...
- HDU 2159 FATE (二维背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 解题报告:这题实际上是一个二维的背包问题,也可以由01背包扩展而来,01背包用一维数组,可想而知 ...
- rqnoj-329-刘翔!加油!-二维背包
注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include< ...
- hdu2159FATE(二维背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在 ...
- NOI 4978 宠物小精灵之收服(二维背包)
http://noi.openjudge.cn/ch0206/4978/ 描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事. 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物 ...
- dp之二维背包poj2576
题意:有一群sb要拔河,把这群sb分为两拨,两拨sb数只差不能大于1,输出这两拨人的体重,小的在前面...... 思路:把总人数除2,总重量除2,之后你会发现就是个简单的二维背包,有两个限制..... ...
- (第三场) A PACM Team 【dp,五维背包】
链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- hdu 3496 Watch The Movie (二维背包)
Watch The Movie Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)T ...
随机推荐
- 读论文-协同过滤技术综述(A Survey of Collaborative Filtering Techniques)
前言 今天读的一篇论文题目为<协同过滤技术综述>(A Survey of Collaborative Filtering Techniques),文章发表于<人工智能研究进展> ...
- Stream4Graph:动态图上的增量计算
作者:张奇 众所周知,当我们需要对数据做关联性分析的时候,一般会采用表连接(SQL join)的方式完成.但是SQL join时的笛卡尔积计算需要维护大量的中间结果,从而对整体的数据分析性能带来巨大影 ...
- IDEA激活后提示We could not validate your license xxxx解决办法
示例报错样式:每次激活单开都会不断弹出--很烦 解决思路是拦截jetbrains校验license的请求, 也就是找到校验license的接口屏蔽掉就行; > 别信网上的配置代理拦截 这样做 ...
- VMware ESXi系统
esxi全称"VMware ESXi",是可直接安装在物理服务器上的强大的裸机管理系统,是一款虚拟软件,不需安装其他操作系统,是VMware服务器虚拟化的基础.通过直接访问并控制底 ...
- docker学习 容器的启动过程
这一节我们来稍微了解下docker原理性的东西1 docker run -i -t ubuntu /bin/bash输入上面这行命令,启动一个ubuntu容器时,到底发生了什么?大致过程可以用下 ...
- 防止恶意解析——禁止通过IP直接访问网站
一.什么是恶意解析 一般情况下,要使域名能访问到网站需要两步,第一步,将域名解析到网站所在的主机,第二步,在web服务器中将域名与相应的网站绑定.但是,如果通过主机IP能直接访问某网站,那么把域名解析 ...
- 一文搞懂MCP协议与Function Call的区别
一.前言 大家好,我是六哥! 今天咱们聊聊编程里两个听起来有点复杂的概念--MCP协议和函数调用(function call),其实用大白话来讲,它们就是两种不同的"沟通方式",就 ...
- MD5加密BASE64加解密
MD5需要引入system.Hash,BASE64需要引入System.NetEncoding,这两个单元应该只有高版本的DELPHI IDE才有 (貌似XE5以上版本才有).如果是D7的话,找第三方 ...
- 【Linux】5.9 Shell函数
Shell 函数 1. 自定义函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] ...
- 【Markdown】简明语法手册
Cmd Markdown 简明语法手册 标签: Cmd-Markdown 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 *斜体*,这是 **粗体** 这是 斜体,这是 粗体. ...