zoukankan      html  css  js  c++  java
  • Dollar Dayz (完全背包+高精度)

    题意:有n元钱,商品的价格在1~k元(每种价格的商品数量无限),用n元去买这些商品,最多有多少种选择?
    思路:就是最简单的完全背包  (1 <= N <= 1000),(1 <= K <= 100).
    也就是说组合数很大 会超出long long范围
    对于求完全背包的组合数即从 dp[0] 到dp[n]中出现的可能次数 ,所以令dp[0] = 1 然后动态转移公式 仍是 dp[j] +=  dp[j-i] ;即自身总数再加上上一次移动的总数

    然后数据过大我们就用两个数组来存储,a保存前18位 b保存后18位,用mod运算来取b,/取a (当然还可以尝试使用__int128);

    #include<cstdio> 
    #include<cstring> 
    #define ll long long 
    const ll INF=1e18; //(ll == __int64 )
    ll a[1010];//高位  
    ll b[1010];//低位  
    int main() 
    { 
        int n,k,i,j; 
        while(scanf("%d%d",&n,&k)!=EOF) 
        { 
            memset(a,0,sizeof(a)); 
            memset(b,0,sizeof(b)); 
            b[0]=1; 
            for(i=1;i<=k;++i) 
            { 
                for(j=i;j<=n;++j) 
                { 
                    a[j]=a[j]+a[j-i]+(b[j]+b[j-i])/INF; 
                    b[j]=(b[j]+b[j-i])%INF; 
                } 
            } 
            if(a[n]==0) 
                printf("%lld
    ",b[n]); 
            else 
                printf("%lld%018lld
    ",a[n],b[n]); 
        } 
        return 0; 
    }   
  • 相关阅读:
    UVA 558 Wormholes
    HDU 1565 方格取数(1)
    poj2607
    poj2552
    poj2491
    poj2502
    poj2613
    .NET Framework 4 与 .NET Framework 4 Client Profile的区别与联系
    .Net Framework 4.0 和 2.0/3.0/3.5
    企业IT系统
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11217778.html
Copyright © 2011-2022 走看看