zoukankan      html  css  js  c++  java
  • D. Nastya and Scoreboard

    题目链接:https://codeforces.com/contest/1341/problem/D

    题目大意:

    一个数字我们可以用 7 个位置的LED管显示出来。 1 代表LED管亮, 0 代表LED管灭。

    现在告诉你 n 个这样的东西并且给出它的每一个位置LED管的亮灭情况,允许你将 m 个灭的LED管点亮,问:你能组成的最大的数字是多少

    想法:
    直接 记忆话搜索 + 贪心就可以了

    #include <algorithm>
    #include <string>
    #include <cstring>
    #include <vector>
    #include <map>
    #include <stack>
    #include <set>
    #include <queue>
    #include <cmath>
    #include <cstdio>
    #include <iomanip>
    #include <ctime>
    #include <bitset>
    #include <cmath>
    #include <sstream>
    #include <iostream>
    
    #define ll long long
    #define ls nod<<1
    #define rs (nod<<1)+1
    #define pii pair<int,int>
    #define mp make_pair
    #define pb push_back
    #define INF 0x3f3f3f3f3f3f3f3f
    #define max(a, b) (a>b?a:b)
    #define min(a, b) (a<b?a:b)
    
    
    const double eps = 1e-10;
    const int maxn = 2e3 + 10;
    const int MOD = 998244353;
    
    int sgn(double a) { return a < -eps ? -1 : a < eps ? 0 : 1; }
    
    using namespace std;
    
    string str[] = {"1110111", "0010010", "1011101", "1011011", "0111010", "1101011", "1101111", "1010010", "1111111", "1111011"};
    char s[maxn][10];
    int vis[maxn][maxn];
    int a[maxn];
    int n,k;
    
    int change(int x,int y) {
        int cnt = 0;
        for (int i = 0;i < 7;i++) {
            if (s[x][i] == '0' && str[y][i] == '1')
                cnt++;
            if (s[x][i] == '1' && str[y][i] == '0')
                return -1;
        }
        return cnt;
    }
    
    void dfs(int cur,int res) {
        if (res < 0)
            return ;
        if (vis[cur][res])
            return ;
        vis[cur][res] = 1;
        if (cur == n + 1) {
            if (res == 0) {
                for (int i = 1;i <= n;i++) {
                    cout << a[i];
                }
                cout << endl;
                exit(0);
            }
            return ;
        }
        for (int i = 9;i >= 0;i--) {
            int tmp = change(cur,i);
            if (tmp == -1)
                continue;
            a[cur] = i;
            dfs(cur+1,res-tmp);
        }
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin >> n >> k;
        for (int i = 1;i <= n;i++) {
            cin >> s[i];
        }
        dfs(1,k);
        cout << -1 << endl;
        return 0;
    }
  • 相关阅读:
    [f]动态判断js加载完成
    [f]添加css3动画的方法
    Meta标签以及viewport
    数据结构与算法-单向链表
    Denormalization 2
    Normalization
    Denormalization
    C# 通过反射获取扩展方法
    从ord()中对Unicode编码的理解
    python访问MS SqlServer(通过pyodbc)
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/13177532.html
Copyright © 2011-2022 走看看