zoukankan      html  css  js  c++  java
  • poj1010

    dfs

    View Code
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define maxn 300
    
    int n;
    int m, tot;
    int stamp[maxn];
    int ans[5], ansnum;
    int sel[5];
    bool tie, none;
    bool vis[maxn];
    
    void input()
    {
        n = 1;
        if (scanf("%d", &stamp[0]) == EOF)
            exit(0);
        while (scanf("%d", &stamp[n]), stamp[n])
            n++;
    }
    
    int cal(int a[], int n)
    {
        int ret = 0;
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i < n; i++)
            if (!vis[a[i]])
            {
                vis[a[i]] = true;
                ret++;
            }
        return ret;
    }
    
    int getmax(int a[], int n)
    {
        int ret = 0;
        for (int i = 0; i < n; i++)
            ret = max(ret, stamp[a[i]]);
        return ret;
    }
    
    void compare()
    {
        int ksel = cal(sel, tot);
        int kans = cal(ans, ansnum);
        int maxans = getmax(ans, ansnum);
        int maxsel = getmax(sel, tot);
    
        if (ansnum == -1 || ksel > kans || (ksel == kans && ansnum > tot) || (ksel
                == kans && ansnum == tot && maxans < maxsel))
        {
            tie = false;
            ansnum = tot;
            for (int i = 0; i < tot; i++)
                ans[i] = sel[i];
            return;
        }
        if (ksel == kans && ansnum == tot && maxans == maxsel)
            tie = true;
    }
    
    void dfs(int now, int money)
    {
        if (money > m)
            return;
        if (money == m)
        {
            none = false;
            compare();
        }
        if (tot == 4)
            return;
        for (int i = now; i < n; i++)
        {
            sel[tot] = i;
            tot++;
            dfs(i, money + stamp[i]);
            tot--;
        }
    }
    
    void print()
    {
        if (none)
        {
            printf("%d ---- none\n", m);
            return;
        }
        printf("%d (%d):", m, cal(ans, ansnum));
        if (tie)
        {
            printf(" tie\n");
            return;
        }
        for (int i = 0; i < ansnum; i++)
            printf(" %d", stamp[ans[i]]);
        putchar('\n');
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        while (1)
        {
            input();
            sort(stamp, stamp + n);
            while (scanf("%d", &m), m)
            {
                tot = 0;
                ansnum = -1;
                tie = false;
                none = true;
                dfs(0, 0);
                if (!none)
                    sort(ans, ans + ansnum);
                print();
            }
        }
        return 0;
    }
  • 相关阅读:
    vue去除#号tomcat配置
    vscode配置
    git忽略想要提交的文件
    vue-cli配置移动端自适应
    远程调试工具 -- weinre
    将博客搬至CSDN
    错误:this dependency was not found:'element-ui/lib/theme-chalk/index.css'。。。。。。。
    win上java1.7和1.8版本修改环境变量无效.md
    mysql 事务
    mysql 函数
  • 原文地址:https://www.cnblogs.com/rainydays/p/2807860.html
Copyright © 2011-2022 走看看