• uva11485 Extreme Discrete Summation(DP)


    首先那括号里的一坨是所有数的小数部分相加取下整

    dp[x][y]表示前x个组成和为y的个数

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define eps 1e-9
    #define ll long long
    using namespace std;
    int n;
    double v[110];
    ll dp[10][110];
    /*
    ll DP(int x,int value){
        if(x==0) return value==0;
        if(dp[x][value]!=-1) return dp[x][value];
        ll ret=0;
        for(int i=0;i<n;i++){
            if(value>=int(v[i]*10+eps)%10) ret+=DP(x-1,value-int(v[i]*10+eps)%10);
        }
        return dp[x][value]=ret;
    }
    */
    int main(){
        while(~scanf("%d",&n)&&n){
            //for(int i=0;i<n;i++) scanf("%lf",&v[i]);
            for(int i=1;i<=n;i++) scanf("%lf",&v[i]);
            /*ll ans=0;
            memset(dp,-1,sizeof dp);
            for(int i=0;i<=72;i++){
                ans+=DP(8,i)*(i/10);
            }
            printf("%lld
    ",ans);*/
            memset(dp,0,sizeof dp);
            dp[0][0]=1;
            for(int i=1;i<=8;i++){
                for(int j=1;j<=n;j++){
                    for(int k=0;k<=72;k++){
                        if(dp[i-1][k]){
                           dp[i][k+int(v[j]*10+eps)%10]+=dp[i-1][k];
                        }
                    }
                }
            }
            ll ans=0;
            for(int i=0;i<=72;i++){
                ans+=dp[8][i]*(i/10);
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    uva11485
  • 相关阅读:
    hdu2844 Coins -----多重背包+二进制优化
    bzoj1452 [JSOI2009]Count ——二维树状数组
    cf685 div2 abcde
    cf675 div2 abcd
    cf669 div2 abcd
    cf668 div2 abcd
    UVA-10795
    cf665 div2 abcd
    Colored Cubes UVALive
    Image Is Everything UVALive
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3540720.html
Copyright © 2020-2023  润新知