题目链接(貌似未报名的不能进去):https://www.nowcoder.com/acm/contest/141/A

题目:

题意:背包题意,并打印路径。

思路:正常背包思路,不过五维的dp很容易爆内存,比赛时无限爆,后面队友提醒用short就过了。不过也可以用滚动减少内存消耗,两种代码实现都贴一下吧~

五维代码实现如下:

 #include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long ll;
typedef unsigned long long ull; #define lson i<<1
#define rson i<<1|1
#define bug printf("*********\n");
#define FIN freopen("D://code//in.txt", "r", stdin);
#define debug(x) cout<<"["<<x<<"]" <<endl;
#define IO ios::sync_with_stdio(false),cin.tie(0); const double eps = 1e-;
const int mod = ;
const int maxn = 1e7 + ;
const double pi = acos(-);
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f; short n, P, A, C, M;
short p[], a[], c[], m[], g[], cnt[];
short dp[][][][][];
bool vis[][][][][]; int main() {
//FIN;
cin >>n;
for(int i = ; i <= n; i++) {
cin >>p[i] >>a[i] >> c[i] >>m[i] >>g[i];
}
cin >>P >>A >>C >>M;
int flag1 = , flag2 = , flag3 = , flag4 = , mx = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= P; j++) {
for(int k = ; k <= A; k++) {
for(int l = ; l <= C; l++) {
for(int t = ; t <= M; t++) {
dp[i][j][k][l][t] = dp[i-][j][k][l][t];
if(j >= p[i] && k >= a[i] && l >= c[i] && t >= m[i]) {
if(dp[i-][j-p[i]][k-a[i]][l-c[i]][t-m[i]] + g[i] > dp[i-][j][k][l][t]) {
dp[i][j][k][l][t] = dp[i-][j-p[i]][k-a[i]][l-c[i]][t-m[i]] + g[i];
vis[i][j][k][l][t] = true;
}
}
}
}
}
}
}
for(int j = ; j <= P; j++) {
for(int k = ; k <= A; k++) {
for(int l = ; l <= C; l++) {
for(int t = ; t <= M; t++) {
if(dp[n][j][k][l][t] > mx) {
flag1 = j, flag2 = k, flag3 = l, flag4 = t;
mx = dp[n][j][k][l][t]; }
}
}
}
}
int num = ;
for(int i = n; i >= ; i--) {
if(vis[i][flag1][flag2][flag3][flag4]) {
cnt[num++] = i - ;
flag1 -= p[i];
flag2 -= a[i];
flag3 -= c[i];
flag4 -= m[i];
}
}
cout <<num <<endl;
for(int i = num - ; i >= ; i--) {
cout <<cnt[i] <<" ";
}
cout <<"\n";
return ;
}

滚动数组实现如下:

 #include <bits/stdc++.h>
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lowbit(x) x&-x
#define MP make_pair
#define pb push_back
#define debug(x) cout<<"x= "<<x<<endl;
#define FIN freopen("in.txt","r",stdin);
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int>pii;
const int mod=1e9+;
const ll infll=0x3f3f3f3f3f3f3f3f;
const int MX = 1e5 + ;
const int INF = 0x3f3f3f3f; short n;
short dp[][][][];
bool vis[][][][][];
short p[],a[],c[],m[],g[];
short P,A,C,M; int main(){
//FIN;
cin>>n;
for(int i=;i<=n;i++)
cin>>p[i]>>a[i]>>c[i]>>m[i]>>g[i];
cin>>P>>A>>C>>M;
memset(dp,,sizeof(dp));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
for(int j=P;j>=p[i];j--){
for(int k=A;k>=a[i];k--){
for(int l=C;l>=c[i];l--){
for(int o=M;o>=m[i];o--){
if(dp[j][k][l][o] > dp[j-p[i]][k-a[i]][l-c[i]][o-m[i]]+g[i]) continue;
dp[j][k][l][o]=dp[j-p[i]][k-a[i]][l-c[i]][o-m[i]]+g[i];
vis[i][j][k][l][o]=;
}
}
}
}
}
int ans[],num=;
while(n){
if(vis[n][P][A][C][M]){
P-=p[n];
A-=a[n];
C-=c[n];
M-=m[n];
ans[++num]=n-;
}n--;
}
printf("%d\n",num);
for(int i=num;i>=;i--)
printf("%d ",ans[i]);
printf("\n");
return ;
}

PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)的更多相关文章

  1. 牛客第三场多校 E Sort String

    链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 Eddy likes to play with string which is a sequen ...

  2. 牛客第三场多校 H Diff-prime Pairs

    链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...

  3. uestc summer training #9 牛客第三场 BFS计数

    G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...

  4. 牛客第五场多校 J plan 思维

    链接:https://www.nowcoder.com/acm/contest/143/J来源:牛客网 There are n students going to travel. And hotel ...

  5. 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树

    目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...

  6. 牛客第五场多校 A gpa 分数规划(模板)

    链接:https://www.nowcoder.com/acm/contest/143/A来源:牛客网 Kanade selected n courses in the university. The ...

  7. Shuffle Cards(牛客第三场+splay)

    题目: 题意:将1~n的数进行m次操作,每次操作将第pi位到pi+si-1位的数字移到第一位,求最后的排列. 思路:现在还没不会写splay,在知道这是splay模板题后找了一波别人的模板,虽然过了, ...

  8. 牛客第三场 J LRU management

    起初看到这道题的时候,草草就放过去了,开了另一道题,结果开题不顺利,总是感觉差一点就可以做出来,以至于一直到最后都没能看这道题qaq 题意:类似于操作系统上讲的LRU算法,有两个操作,0操作代表访问其 ...

  9. 最长相同01数的子串(map搞搞)--牛客第三场 -- Crazy Binary String

    题意: 如题. 或者用我的数组分治也可以,就是有点愚蠢. //#include <bits/stdc++.h> #include <map> #include <iost ...

随机推荐

  1. 老生常谈-从输入url到页面展示到底发生了什么

    来自:咸鱼老弟 - 博客园 链接:http://www.cnblogs.com/xianyulaodi/p/6547807.html

  2. node.js cmd 输入npm-v无反应

    今天安装node,先是提示node版本太低.去官网更新了一下,然后 npm install -g vue-cli 结果出了个"npm ERR! errno -4048" 百度出 这 ...

  3. 火狐浏览器(FireFox)安装Flash插件失败处理方法

    最近不知道怎么了,总是嫌弃IE,可能是被网络流量监测的网址给搞得了,弄了火狐浏览器,也安装了猎豹,这里不对浏览器做评价 好多朋友安装好火狐(FireFox)的时候发现之前不是有装IE的Flash播放插 ...

  4. 错误 10 非静态的字段、方法或属性“Test10.Program.a”要求对象引用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test ...

  5. 第二章 IoC

    什么是IoC 如何配置IOC Bean的生命周期 多环境配置 条件化配置Bean 什么是IOC? IOC有两层含义, 1.控制反转:将对象实例的创建与销毁的权限交给Spring容器管理,而不再是调用对 ...

  6. UDP发送的数据 以数据包形式发送

    UDP发送的数据 以数据包形式发送

  7. 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆

    题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...

  8. 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒

    Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例 ...

  9. 2018牛客多校第六场 G.Pikachu

    题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...

  10. IT英语累积

    JPA: Java Persistence API   一种持久化规范 Spring Data:一种用于简化数据库访问,支持云服务的开源框架 Spring Data JPA:是Spring Data的 ...