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

题目:

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

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

五维代码实现如下:

  1. #include <set>
  2. #include <map>
  3. #include <queue>
  4. #include <stack>
  5. #include <cmath>
  6. #include <bitset>
  7. #include <cstdio>
  8. #include <string>
  9. #include <vector>
  10. #include <cstdlib>
  11. #include <cstring>
  12. #include <iostream>
  13. #include <algorithm>
  14. using namespace std;
  15.  
  16. typedef long long ll;
  17. typedef unsigned long long ull;
  18.  
  19. #define lson i<<1
  20. #define rson i<<1|1
  21. #define bug printf("*********\n");
  22. #define FIN freopen("D://code//in.txt", "r", stdin);
  23. #define debug(x) cout<<"["<<x<<"]" <<endl;
  24. #define IO ios::sync_with_stdio(false),cin.tie(0);
  25.  
  26. const double eps = 1e-;
  27. const int mod = ;
  28. const int maxn = 1e7 + ;
  29. const double pi = acos(-);
  30. const int inf = 0x3f3f3f3f;
  31. const ll INF = 0x3f3f3f3f3f3f3f3f;
  32.  
  33. short n, P, A, C, M;
  34. short p[], a[], c[], m[], g[], cnt[];
  35. short dp[][][][][];
  36. bool vis[][][][][];
  37.  
  38. int main() {
  39. //FIN;
  40. cin >>n;
  41. for(int i = ; i <= n; i++) {
  42. cin >>p[i] >>a[i] >> c[i] >>m[i] >>g[i];
  43. }
  44. cin >>P >>A >>C >>M;
  45. int flag1 = , flag2 = , flag3 = , flag4 = , mx = ;
  46. for(int i = ; i <= n; i++) {
  47. for(int j = ; j <= P; j++) {
  48. for(int k = ; k <= A; k++) {
  49. for(int l = ; l <= C; l++) {
  50. for(int t = ; t <= M; t++) {
  51. dp[i][j][k][l][t] = dp[i-][j][k][l][t];
  52. if(j >= p[i] && k >= a[i] && l >= c[i] && t >= m[i]) {
  53. if(dp[i-][j-p[i]][k-a[i]][l-c[i]][t-m[i]] + g[i] > dp[i-][j][k][l][t]) {
  54. dp[i][j][k][l][t] = dp[i-][j-p[i]][k-a[i]][l-c[i]][t-m[i]] + g[i];
  55. vis[i][j][k][l][t] = true;
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. for(int j = ; j <= P; j++) {
  64. for(int k = ; k <= A; k++) {
  65. for(int l = ; l <= C; l++) {
  66. for(int t = ; t <= M; t++) {
  67. if(dp[n][j][k][l][t] > mx) {
  68. flag1 = j, flag2 = k, flag3 = l, flag4 = t;
  69. mx = dp[n][j][k][l][t];
  70.  
  71. }
  72. }
  73. }
  74. }
  75. }
  76. int num = ;
  77. for(int i = n; i >= ; i--) {
  78. if(vis[i][flag1][flag2][flag3][flag4]) {
  79. cnt[num++] = i - ;
  80. flag1 -= p[i];
  81. flag2 -= a[i];
  82. flag3 -= c[i];
  83. flag4 -= m[i];
  84. }
  85. }
  86. cout <<num <<endl;
  87. for(int i = num - ; i >= ; i--) {
  88. cout <<cnt[i] <<" ";
  89. }
  90. cout <<"\n";
  91. return ;
  92. }

滚动数组实现如下:

  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define lson l,m,rt<<1
  5. #define rson m+1,r,rt<<1|1
  6. #define lowbit(x) x&-x
  7. #define MP make_pair
  8. #define pb push_back
  9. #define debug(x) cout<<"x= "<<x<<endl;
  10. #define FIN freopen("in.txt","r",stdin);
  11. using namespace std;
  12. typedef long long ll;
  13. typedef vector<int> vi;
  14. typedef pair<int,int>pii;
  15. const int mod=1e9+;
  16. const ll infll=0x3f3f3f3f3f3f3f3f;
  17. const int MX = 1e5 + ;
  18. const int INF = 0x3f3f3f3f;
  19.  
  20. short n;
  21. short dp[][][][];
  22. bool vis[][][][][];
  23. short p[],a[],c[],m[],g[];
  24. short P,A,C,M;
  25.  
  26. int main(){
  27. //FIN;
  28. cin>>n;
  29. for(int i=;i<=n;i++)
  30. cin>>p[i]>>a[i]>>c[i]>>m[i]>>g[i];
  31. cin>>P>>A>>C>>M;
  32. memset(dp,,sizeof(dp));
  33. memset(vis,,sizeof(vis));
  34. for(int i=;i<=n;i++){
  35. for(int j=P;j>=p[i];j--){
  36. for(int k=A;k>=a[i];k--){
  37. for(int l=C;l>=c[i];l--){
  38. for(int o=M;o>=m[i];o--){
  39. if(dp[j][k][l][o] > dp[j-p[i]][k-a[i]][l-c[i]][o-m[i]]+g[i]) continue;
  40. dp[j][k][l][o]=dp[j-p[i]][k-a[i]][l-c[i]][o-m[i]]+g[i];
  41. vis[i][j][k][l][o]=;
  42. }
  43. }
  44. }
  45. }
  46. }
  47. int ans[],num=;
  48. while(n){
  49. if(vis[n][P][A][C][M]){
  50. P-=p[n];
  51. A-=a[n];
  52. C-=c[n];
  53. M-=m[n];
  54. ans[++num]=n-;
  55. }n--;
  56. }
  57. printf("%d\n",num);
  58. for(int i=num;i>=;i--)
  59. printf("%d ",ans[i]);
  60. printf("\n");
  61. return ;
  62. }

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. lintcode-28-搜索二维矩阵

    搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1, 3, ...

  2. C#,Winform 文件的导入导出 File

    1.导入 导入对话框:OpenFileDialog private void sbtnsb_Click(object sender, EventArgs e) { try { OpenFileDial ...

  3. YaoLingJump开发者日志(八)V1.1版本完成

    跳跃吧瑶玲下载连接 官网下载(网站服务器不支持10M以上的文件上传-_-||) 百度网盘下载 介绍   忙里偷闲,把之前的工作整理了一下完成V1.1版本,下面是更新! (1)去掉了积分榜. (2)增加 ...

  4. SERVER 2008 R2 SP1下的内存虚拟盘(支持32位,64位的所有windows版本)

    一时冲动把笔记本的系统换成了2008 R2 SP1的,本来想着用笔记本开HYPER-V的,结果是失败了,我发现我的4750G开了HYPER-V后CPU一直居高不下,其中有个什么系统软件保护的服务就占用 ...

  5. PL/SQL在 win8.1系统下连接Oracle11g没有database处理方法(亲身实验,吐血分享)

    一.问题 这里首先说明下我的环境:win8.1(64bit)+oracle11g(64bit)+PL/SQL(32bit).状况是:net manager正常配置,测试也成功,但是用PL/SQL连接的 ...

  6. 在临床医学里面,bid、tid、qid和q3w是什么意思啊??这些缩写的全称是怎么写呢??

    { value: 'QD', name: 'QD 每日一次' }, { value: 'BID', name: 'BID 每日两次' }, { value: 'TID', name: 'TID 每日三 ...

  7. Android UI设计的基本元素有哪些

    在android app开发如火如荼的今天,如何让自己的App受人欢迎.如何增加app的下载量和使用量....成为很多android应用开发前,必须讨论的问题.而ui设计则是提升客户视觉体验度.提升下 ...

  8. CF995C Leaving the Bar

    题目描述 For a vector v⃗=(x,y) \vec{v} = (x, y) v=(x,y) , define ∣v∣=x2+y2 |v| = \sqrt{x^2 + y^2} ∣v∣=x2 ...

  9. [COGS2652]秘术「天文密葬法」

    description 题面 给个树,第\(i\)个点有两个权值\(a_i\)和\(b_i\),现在求一条长度为\(m\)的路径,使得\(\frac{\sum a_i}{\sum b_i}\)最小 d ...

  10. BZOJ3238:[AHOI2013]差异——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3238 https://www.luogu.org/problemnew/show/P4248 参考 ...