链接:

https://www.nowcoder.com/acm/contest/141/A

题意:

有n(1≤n≤36)个物品,每个物品有四种代价pi,ai,ci,mi,价值为gi(0≤pi,ai,ci,mi,gi≤36),
求四种代价分别不超过P,A,C,M(0≤P,A,C,M≤36)的条件下能获得的最大价值,输出所选择的物品。

分析:

01背包的思路,只是代价多了几个而已,数组开多几维就好了。
可以用vis[i][p][a][c][m]来表示在四种代价分别为p,a,c,m的状态下是否用第i件物品更新过,
从而实现记录方案的目的,详见代码。

代码:

 #include <cstdio>
#include <vector>
using namespace std; const int UP = + ;
int P, A, C, M;
int p[UP], a[UP], c[UP], m[UP], g[UP];
int d[UP][UP][UP][UP];
bool vis[UP][UP][UP][UP][UP]; int main() {
int n;
scanf("%d", &n);
for(int i = ; i < n; i++)
scanf("%d%d%d%d%d", &p[i], &a[i], &c[i], &m[i], &g[i]);
scanf("%d%d%d%d", &P, &A, &C, &M); for(int i = ; i < n; i++) {
for(int pp = P; pp >= p[i]; pp--) {
for(int aa = A; aa >= a[i]; aa--) {
for(int cc = C; cc >= c[i]; cc--) {
for(int mm = M; mm >= m[i]; mm--) {
if(d[pp][aa][cc][mm] < d[pp-p[i]][aa-a[i]][cc-c[i]][mm-m[i]] + g[i]) {
d[pp][aa][cc][mm] = d[pp-p[i]][aa-a[i]][cc-c[i]][mm-m[i]] + g[i];
vis[i][pp][aa][cc][mm] = true;
}
}
}
}
}
} vector<int> ans;
for(int i = n-; i >= ; i--) {
if(!vis[i][P][A][C][M]) continue;
ans.push_back(i);
P -= p[i]; A -= a[i]; C -= c[i]; M -= m[i];
} printf("%d\n", ans.size());
if(ans.size()) {
printf("%d", ans[]);
for(int i = ; i < ans.size(); i++) printf(" %d", ans[i]);
}
printf("\n");
return ;
}

牛客网多校训练第三场 A - PACM Team(01背包变形 + 记录方案)的更多相关文章

  1. 牛客网多校训练第三场 C - Shuffle Cards(Splay / rope)

    链接: https://www.nowcoder.com/acm/contest/141/C 题意: 给出一个n个元素的序列(1,2,...,n)和m个操作(1≤n,m≤1e5),每个操作给出两个数p ...

  2. 牛客网多校训练第四场C sequence

    (牛客场场有笛卡尔树,场场都不会用笛卡尔树...自闭,补题心得) 题目链接:https://ac.nowcoder.com/acm/contest/884/C 题意:给出两个序列a,b,求max{mi ...

  3. 牛客网2018暑期训练 第三场 a题

    #include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...

  4. 牛客网多校训练第八场A All one Matrix

    题目链接:https://ac.nowcoder.com/acm/contest/888/A 题意:求出有多少个不被包含的全1子矩阵 解题思路:首先对列做处理,维护每个位置向上1的个数,然后我们从最后 ...

  5. 牛客网多校训练第二场D Kth Minimum Clique

    链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...

  6. 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】

    链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  7. 牛客网多校赛第七场J--Sudoku Subrectangle

    链接:https://www.nowcoder.com/acm/contest/145/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  8. 牛客网多校赛第七场--C Bit Compression【位运算】【暴力】

    链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...

  9. 牛客网多校赛第七场A--Minimum Cost Perfect Matching【位运算】【规律】

    链接:https://www.nowcoder.com/acm/contest/145/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

随机推荐

  1. 打开usb调试的方法

    方法一: settings --> about tablet --> build number(疯狂点击)  -->回退 developer options --> USB d ...

  2. alpine 上部署netcore 项目

    1 Alpine部署 注:以下教程是以Alpine v3.7.0系统部署:其他Linux系统部署也基本相同 1.1 .NET Core环境包下载 .net core下载地址:https://dotne ...

  3. C#语言-05.委托和事件

    a. 委托:是一种定义方法签名的类型,可以与具有兼容签名的任何方法关联.所谓兼容的方法,是指这个方法和委托的方法签名具有相同的返回类型和参数 i. 语法:delegate 方法签名; . 方法签名是方 ...

  4. git提交空文件夹和删除远程文件

    git提交空文件夹 在文件夹中创建 .gitkeep 文件,文件内容如下 # Ignore everything in this directory * # Except this file !.gi ...

  5. ps命令详解加例子

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  6. 流畅的python和cookbook学习笔记(三)

    1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.pople ...

  7. Java 集合类常用方法

    Collection中的contains()方法和remove()方法. boolean contains(Object o);该方法是用来判断集合中是否包含某个元素,若包含,返回true,不包含返回 ...

  8. 二 Channel

    Java NIO的通道类似流,但又有些不同 既可以从通道中读取数据,也可以写数据到通道.但是流的读写通常是单向的 通道可以异步读写 通道中的数据通常总是要先读到一个Buffer,或者总是从Buffer ...

  9. C Primer Plus note9

    undefined reference to `WinMain@16'| 运行程式的时候出现了这样的错误,而且编译器也没有提示是哪一行出错: 经过百度搜索,发现了问题所在: 上面的图中main()函数 ...

  10. svn 文件后面显示时间和提交人

    1.在eclipse中选择window-->preferences,然后选择下图中的位置,就可以显示你想要的东西的了,在此记下以备后用