zoukankan      html  css  js  c++  java
  • c4 L3-001 找零钱 (简单01背包-输出最小字典序解(用vector保存当前最优解))

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <vector>
     4 #include <cstdio>
     5 #include <cstring>
     6 using namespace std;
     7 const int N=1e4+7;
     8 int a[N];
     9 bool dp[107];
    10 vector < vector <int> > ans (107);
    11 int n,m;
    12 bool cmp (vector<int> x, vector<int> y)  {// 不用考虑x与y得大小 因为至少一个数不同 或者全部相同
    13     for (int i=0;i<x.size();i++) {
    14         if (x[i]<y[i])  return 1;
    15         else if (x[i]>y[i])  return 0;
    16     }
    17     return 0;
    18 }
    19 int main ()
    20 {
    21     scanf ("%d %d",&n,&m);
    22     for (int i=1;i<=n;i++)
    23         scanf ("%d",&a[i]);
    24     sort (a+1,a+1+n);
    25     dp[0]=1;
    26     for (int i=1;i<=n;i++) {
    27         for (int j=m;j>=a[i];j--) {
    28             if (dp[j-a[i]])  {
    29                 vector <int> tmp=ans[j-a[i]];
    30                 tmp.push_back(i);
    31                 if (!dp[j])  { dp[j]=1;ans[j]=tmp; }
    32                 else if (cmp (tmp,ans[j]))  ans[j]=tmp;
    33             }
    34         }
    35     }
    36     if (!dp[m])  printf ("No Solution
    ");
    37     else  {
    38         printf ("%d",a[ans[m][0]]);
    39         for (int i=1;i<ans[m].size();i++)
    40             printf (" %d",a[ans[m][i]]);
    41         printf ("
    ");
    42     }
    43     return 0;
    44 }
    抓住青春的尾巴。。。
  • 相关阅读:
    转:用十条命令在一分钟内检查Linux服务器性能
    android适配的努力
    转: Android Studio你不知道的调试技巧
    编码处理过滤器
    PageBean分页组件
    BaseServlet方法分发
    SQLHelper、DBUtil终极封装
    JavaEE面试题库
    Servlet、JSP选择题(2)
    Servlet、JSP选择题
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/8509892.html
Copyright © 2011-2022 走看看