zoukankan      html  css  js  c++  java
  • 算法设计与分析 3.5 大尾巴狼

    ★题目描述

    本期活动中,共有N件商品参与促销。

    狼是一种很智慧的动物,店主提出了一个这样的促销方案:每件商品有折扣价Ci和原价Vi。

    如果购物车内所有商品的原价和恰好是折扣价的K倍,那么直接免单!

    你想知道在能够免单的情况下,最多免费拿走原价总价值和多少的商品。

    ★输入格式

    第一行包括两个正整数N, K,表示共有N件商品,指定的常数为K。

    接下来的一行包括N个正整数,第i个正整数表示第i个物品的原价。

    接下来的一行包括N个正整数,第i个正整数表示第i个物品的折扣价。

    ★输出格式

    输出仅包括一个正整数,表示你能拿走的最大总价值。

    ★样例输入

    3 2
    10 8 1
    2 7 1
    

    ★样例输出

    18
    

    ★提示

    对于100%的数据,1<=N<=100,1<=k<=10,1<=Ci,Vi<=100

    ★参考代码

    思路参考自共享文件

    /*
    用变量cnt记录原价与折扣价K倍的差值 
    F[cnt] 表示为差值cnt为负的情况下能取到的最大价值
    G[cnt] 表示为差值cnt为正的情况下能取到的最大价值
    最后结果就是看 F[i]+G[i] 和最大即为所求, 
    */
    
    #include<bits/stdc++.h>
    using namespace std;
    
    int N,K;
    int C[105],V[105];
    int F[10005], G[10005]; //价与折扣价K倍的差值  --> 最大总价值 
    
    int main(){
        scanf("%d%d",&N,&K);
        for(int i=1; i<=N; i++)  scanf("%d",&V[i]);
        for(int i=1; i<=N; i++)  scanf("%d",&C[i]);
        
        memset(F, -0X3F, sizeof(F)), F[0]=0;
        memset(G, -0X3F, sizeof(G)), G[0]=0;  
        for(int i=1; i<=N; i++) { //考虑第i件商品 
            int cnt=V[i]-C[i]*K; // 折扣价的K倍与原价之间的差值
            if(cnt<0){
                cnt=-cnt;
                for(int j=10000; j>=cnt; --j) F[j] = max(F[j], F[j-cnt]+V[i]);
            }
            else{
                for(int j=10000; j>=cnt; --j) G[j] = max(G[j], G[j-cnt]+V[i]);
            }
        } 
        
    	int res=0;
        for(int i=0; i<10000; ++i) { //折扣价的K倍与原价之间的差值
            res = max(res, F[i]+G[i]);
        }
    	printf("%d
    ",res==0 ? -1 : res);
        return 0;
    }
    
  • 相关阅读:
    Ansible
    Ansible
    MySQL
    JS计算时间差(天,时,分钟,秒)
    cookie,localStorage,sessionStorage的区别
    css布局 -双飞翼布局&圣杯布局
    Python批量爬取网站图片
    vue-cli3中引入图片的几种方式和注意事项
    git常用命令
    vue-cli3的打包并在本地查看
  • 原文地址:https://www.cnblogs.com/yejifeng/p/12061529.html
Copyright © 2011-2022 走看看