zoukankan      html  css  js  c++  java
  • HDU 6083 度度熊的午饭时光(01背包+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=6083

    题意:

    思路:

    01背包+路径记录。

    题目有点坑,我一开始逆序枚举菜品,然后一直WA,可能这样的话路径记录会有点问题。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<sstream>
     6 #include<vector>
     7 #include<stack>
     8 #include<queue>
     9 #include<cmath>
    10 #include<map>
    11 #include<set>
    12 using namespace std;
    13 typedef long long ll;
    14 typedef pair<int,ll> pll;
    15 const int INF = 0x3f3f3f3f;
    16 const int maxn=100+5;
    17 
    18 int n, m;
    19 int val[1005],w[1005];
    20 int d[1005];
    21 int path[1005][1005];
    22 vector<int> ans;
    23 
    24 int main()
    25 {
    26     //freopen("in.txt","r",stdin);
    27     int kase=0;
    28     int T;
    29     scanf("%d",&T);
    30     while(T--)
    31     {
    32         scanf("%d",&n);
    33         scanf("%d",&m);
    34         for(int i=1;i<=m;i++)  scanf("%d%d",&val[i],&w[i]);
    35         memset(d,0,sizeof(d));
    36         memset(path,0,sizeof(path));
    37 
    38         for(int i=1;i<=m;i++)
    39         {
    40             for(int j=n;j>=w[i];j--)
    41             {
    42                 if(d[j-w[i]]+val[i]>d[j])
    43                 {
    44                     d[j]=d[j-w[i]]+val[i];
    45                     path[i][j]=1;
    46                 }
    47             }
    48         }
    49         printf("Case #%d:
    ",++kase);
    50         int sum=0;
    51         ans.clear();
    52         for(int i=m,j=n;i>=1 && j>=0;i--)
    53         {
    54             if(path[i][j])
    55             {
    56                 ans.push_back(i);
    57                 j-=w[i];
    58                 sum+=w[i];
    59             }
    60         }
    61         printf("%d %d
    ",d[n],sum);
    62         sort(ans.begin(),ans.end());
    63         int sz=ans.size();
    64         for(int i=0;i<sz;i++)
    65         {
    66             printf("%d%c",ans[i],i==sz-1?'
    ':' ');
    67         }
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    js三种经典排序:冒泡排序、插入排序、快速排序
    CSS小技巧
    2017
    实际开发中的问题积累【积累】
    F.I.S本地环境的搭建教程
    移动端前端开发注意点(未完待续)
    【六】PHP正则表达式方法
    【五】PHP数组操作函数
    【三】php之梗
    【二】php常用方法
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7301597.html
Copyright © 2011-2022 走看看