zoukankan      html  css  js  c++  java
  • poj1416 Shredding Company

    思路:

    搜索。

    实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <vector>
     4 #include <algorithm>
     5 #include <cstring>
     6 using namespace std;
     7 
     8 const int INF = 0x3f3f3f3f;
     9 
    10 vector<int> num;
    11 int n, x, y, maxn, ansn;
    12 bool split[10];
    13 int ans[10], buf[10], cnt_m = 0;
    14 
    15 void dfs(int now, bool f)
    16 {
    17     if (now == n)
    18     {
    19         int sum = 0;
    20         split[n - 1] = true;
    21         int cnt = 0, t = 0;
    22         for (int i = 0; i < n; i++)
    23         {
    24             cnt += num[i];
    25             if (split[i])
    26             {
    27                 sum += cnt;
    28                 buf[t++] = cnt;
    29                 cnt = 0;
    30             }
    31             else
    32                 cnt *= 10;
    33         }
    34         if (sum <= x)
    35         {
    36             if (sum > maxn)
    37             {
    38                 maxn = sum;
    39                 ansn = t;
    40                 for (int i = 0; i < ansn; i++)
    41                 {
    42                     ans[i] = buf[i];
    43                 }
    44             }
    45             else if (sum == maxn && f)
    46             {
    47                 cnt_m++;
    48             }
    49         }
    50         return;
    51     }
    52     split[now] = true;
    53     dfs(now + 1, f);
    54     split[now] = false;
    55     dfs(now + 1, f);
    56 }
    57 
    58 int main()
    59 {
    60     //freopen("C:\users\wangyiming\Desktop\in.txt", "r", stdin);
    61     while (cin >> x >> y, x || y)
    62     {
    63         num.clear();
    64         maxn = -INF;
    65         cnt_m = 0;
    66         memset(split, 0, sizeof(split));
    67         while (y)
    68         {
    69             num.push_back(y % 10);
    70             y /= 10;
    71         }
    72         n = num.size();
    73         reverse(num.begin(), num.end());
    74         dfs(0, false);
    75         dfs(0, true);
    76         if (cnt_m > 2) puts("rejected");
    77         else if (maxn != -INF)
    78         {
    79             cout << maxn << " ";
    80             for (int i = 0; i < ansn; i++)
    81             {
    82                 cout << ans[i] << " ";
    83             }
    84             cout << endl;
    85         }
    86         else puts("error");
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    flex布局下,将内容限定在容器内(如内容超出以省略号显示)的实现方案
    模板引擎——jquery.tmpl.js
    CSS布局——display: flex
    js实现实时显示当前时间的方法
    PS——规定尺寸的证件照的制作
    辅助开发——ps一键切图篇
    TCP的三次握手和四次挥手
    HTTP 协议基础入门篇总结
    频率组件
    视图组件
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6762781.html
Copyright © 2011-2022 走看看