码迷,mamicode.com
首页 > 其他好文 > 详细

申通的云原生实践之路:如何实现应用基于容器的微服务改造?

时间:2020-08-08 00:34:55      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:政府   调用   领域   需求   rac   核心   acl   mesh   针对   

【题目大意】

Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有\(n\)种面值的硬币,面值分别为\(b1, b2,..., bn\). 但是每种硬币有数量限制,现在我们想要凑出面值\(k\)求最少要用多少个硬币.

\(n\le200,1\le k,b_i \le100000\)

【分析】

看一眼题目,一道多重背包的模板题,但是数据范围比较大,如果直接写多重背包则会TLE

【优化】

考虑采用二进制进行优化

【代码】

#include <bits/stdc++.h>
using namespace std ;
const int MAXN = 1000000 + 5 ;
int n , k ;
int b[ MAXN ] ;
int f[ MAXN ] , w[ MAXN ] , c[ MAXN ] ;
inline void solve ( int wi , int ci , int numi ) { // 二进制拆分
    int t = 1 ;
    while ( numi >= t ) {
        w[ ++ w[ 0 ] ] = wi * t ;
        c[ ++ c[ 0 ] ] = t ;
        numi -= t ;
        t <<= 1 ;
    }
    w[ ++ w[ 0 ] ] = wi * numi ;
    c[ ++ c[ 0 ] ] = numi ;
}
signed main () {
    scanf ( "%d" , &n ) ;
    for ( int i = 1 ; i <= n ; i ++ )
        scanf ( "%d" , &b[ i ] ) ;
    for ( int i = 1 ; i <= n ; i ++ ) {
        int num ; scanf ( "%d" , &num ) ;
        solve ( b[ i ] , 1 , num ) ;
    }
    memset ( f , 0x3f , sizeof ( f ) ) ; n = w[ 0 ] ;
    scanf ( "%d" , &k ) ;
    f[ 0 ] = 0 ;
    for ( int i = 1 ; i <= n ; i ++ ) {
        for ( int j = k ; j >= w[ i ] ; j -- ) {
            f[ j ] = min ( f[ j ] , f[ j - w[ i ] ] + c[ i ] ) ;
        }
    }
    printf ( "%d\n" , f[ k ] ) ;
    return 0 ;
}

申通的云原生实践之路:如何实现应用基于容器的微服务改造?

标签:政府   调用   领域   需求   rac   核心   acl   mesh   针对   

原文地址:https://blog.51cto.com/13778063/2517938

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!