zoukankan      html  css  js  c++  java
  • hdoj-2082-找单词

    #include <iostream>
    #include <vector>
    #include <cstring>
    
    using namespace std;
    
    const int _max = 60;
    int c1[_max], c2[_max];//c1[i]:当前多项式x^i的系数
    vector<int> cnt, v;//cnt[i]:第i个字母的个数 v[i]:第i个字母的权值
    //请输出能找到的总价值(指数)<=50的单词数(系数)
    int main() {
        int t, i, j, k;
        cin >> t;
        while (t--) {
            memset(c1, 0, sizeof(c1));
            memset(c2, 0, sizeof(c2));
            cnt.clear();
            v.clear();
            for (i = 1; i <= 26; ++i) {
                int tmp;
                cin >> tmp;
                if (tmp != 0) {
                    cnt.push_back(tmp);
                    v.push_back(i);
                }
            }
            if (cnt.empty()) cout << 0 << endl;
            else {
                for (int i = 0; i <= 50 && i / v[0] <= cnt[0]; i += v[0]) c1[i] = 1;
                int len = (int) cnt.size();
                for (i = 1; i < len; ++i) {//第i个表达式,len就是有效元素的个数
                    for (j = 0; j <= 50; ++j) {//我们只关心c1和c2运算结果指数<=50的
                        for (k = 0; k + j <= 50 && k / v[i] <= cnt[i]; k += v[i])//k是c2的指数
                            c2[k + j] += c1[j];//c1里的第j个元素与c2里指数为k的元素运算
                    }
                    for (j = 0; j <= 50; ++j) {
                        c1[j] = c2[j];
                        c2[j] = 0;
                    }
                }
                int res = 0;
                for (int i = 1; i <= 50; ++i) res += c1[i];
                cout << res << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    低于时钟频率的任意频率生成(相位累加器)
    verilog实现奇数倍分频
    No.135 Candy
    No.42 Trapping Rain Water
    No.149 Max Point on a Line
    No.147 Insertion Sorted List
    No.21 Merge Two Sorted List
    No.88 Merge Sorted Array
    No.148 Sort List
    No.206 Reverse Linked List
  • 原文地址:https://www.cnblogs.com/t1314/p/12511978.html
Copyright © 2011-2022 走看看