• 牛客-模拟、枚举与贪心 2022.10.20


    答题卡

    答题卡是n * n 的,要求出所有的使横竖答题卡对称的涂写方案。
    首先,应该看清楚题面给出的条件,横竖答题卡都只能填一个答案,并且横竖答题卡是要对称的。所以横答题卡某一行的答案确定之后,对应的竖答题卡的某一列的答案也就确定了,并且交于这两个答案的行和列也已经确定了

    n = 3可以看到,当将第一行的答案放在第一列的时候,剩下的就是求的答题卡规模为(n - 1) * (n - 1) 的所有方案,当第一行的答案放在第二列的时候,剩下的就是求答题卡规模为(n - 2) * (n - 2) 的所有方案(因为此时根据答案横竖相同要求的对称性,确定了一行的同时也就确定了一列,所以此时有两行和两列都不能进行选择),同理将第一行的答案放在第三列也是一样的。而n = 4的所有情况也是跟n = 3类似。
    所以我们可以得出这样的结论
    在棋盘规模为 的情况下,除去将第一行的答案放在第一列之外(这种情况是转化为求(n - 1) * (n - 1)的所有方案数),剩余的情况有(n - 1) 种,并且这(n - 1)种情况都是一样的,都是求棋盘规模为(n - 2) * (n - 2) 的所有方案数。

    F(n) = F(n - 1) + (n - 1) * F(n - 2)

    1. #include
    2. using namespace std;
    3. const int MOD = 1000000000 + 7;
    4. int main() {
    5. int n;
    6. cin >> n;
    7. //res[i]表示i * i的矩阵的方案数目
    8. vector<long long> res;
    9. res.emplace_back(1), res.emplace_back(1), res.emplace_back(2);
    10. for(int i = 3; i <= n; i++) {
    11. res.emplace_back((res[i - 1] + (((i - 1) % MOD) * (res[i - 2] % MOD))%MOD) % MOD);
    12. }
    13. cout << res[n] << endl;
    14. return 0;
    15. }

    零钱兑换

    比较经典的多重背包问题

    1. #include
    2. using namespace std;
    3. int dp[3][210];
    4. int money[3] = {1, 2, 5};
    5. int main() {
    6. int n;
    7. cin>>n;
    8. for(int i = 0; i <= 200; i++)
    9. dp[0][i] = 1;
    10. dp[1][0] = 1, dp[2][0] = 1;
    11. for(int i = 1; i < 3; i++) {
    12. for(int j = 0; j <= 200 ; j++)
    13. if(j >= money[i])
    14. dp[i][j] = dp[i-1][j] + dp[i][j-money[i]];
    15. else
    16. dp[i][j] = dp[i-1][j];
    17. }
    18. cout<2][n] <
    19. return 0;
    20. }

    斐波那契

    利用斐波那契数列的通项公式进行推导,最后得到的结果为(-1)^n。所以只需要判断一下n的奇偶性即可得到答案。

    1. #include
    2. using namespace std;
    3. int main() {
    4. string s;
    5. cin >> s;
    6. if(s[s.size() - 1] % 2 == 0)
    7. cout << 1 << endl;
    8. else
    9. cout << -1 << endl;
    10. return 0;
    11. }

  • 相关阅读:
    Nginx优化与防盗链
    1024短信盲盒 | 暖心短信陪你过节,还有更多好礼
    抽奖动画 - 红包雨抽奖
    mysql redis的区别
    PTA 7-24 求素数
    firefox_dev_linux下载安装配置(部分系统自带包请看结尾)
    EventLoop框架C++服务端(Tcp/Ip)搭建---完善
    一文掌握设计模式(定义+UML类图+应用)doing...
    【Node.js入门】1.2 部署Node.js开发环境
    matlab线性规划与整数规划方法
  • 原文地址:https://blog.csdn.net/Ls_attack/article/details/127426936