zoukankan      html  css  js  c++  java
  • P1754球迷购票问题

    这是一道动态规划题,其实也是个数论题。

    有n人拿50,有n人拿100买票,必须让50元的人买,不然无法找零钱,问最多有几种方案可以每一次都买票成功。这个题首先令人想到搜索,但是随即发现dp是正解,于是dp[i][j]代表当50为i,100为j人时

    最大的方案数,于是去推导方程,得到dp[i][j]=dp[i-1][j]+dp[i][j-1]。循环时j一定要小于i。当把结果算出来时,看题解发现这是个卡塔兰数,完全可以写递推公式来写。

    1.迫切需要摆脱对题解的依赖

    2.积累卡塔兰数的模型,可以套用状态转移方程

    3.排列组合计算范围,大概率开long long

    4.初始化一定要写全

    代码

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #define N 1001
    using namespace std;
    long long dp[N][N];//当前总共买到第n个时最大的方案数 
    int n;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            dp[0][i]=0;
        }
        
        for(int i=1;i<=n;i++){
            dp[i][0]=1;
        }
        for(int i=1;i<=n;i++){//50
            for(int j=1;j<=i;j++)//100 
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
        cout<<dp[n][n];
        
        return 0;
    } 
    待到oi十一月,我花开后百花杀。
  • 相关阅读:
    sublime 下载 插件
    前端跨域
    浏览器内核
    JavaScript数据类型检测
    代码整洁之道——10、注释
    代码整洁之道——9、格式化
    代码整洁之道——8、错误处理
    代码整洁之道——7、并发
    代码整洁之道——6、测试
    代码整洁之道——5、SOLID
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11253311.html
Copyright © 2011-2022 走看看