zoukankan      html  css  js  c++  java
  • 最大人品

    试题描述
     
    KFC 一共有 N 种套餐:用 1 到 N 标号,每种套餐都有一个价钱。共有 M 个同学,每个同学都要订一份套餐,而且由于每个人对于不同套餐的喜爱度不同,对于 WX 买的不同套餐,会给 WX 涨不同数目的人品。 WX 身上只有 K 元钱,他想在他能负担得起的情况下获得最多的人品,这样他今年 OI 就更稳了。
    输入
    第一行为三个数 N,M,K。
    第二行 N 个数 ai 表示第 i 种套餐的价格。
    接下来是 M 行 N 列的矩阵,第 i+2 行第 j 列的数表示 WX 为第 i 个同学买到第 j 种套餐后,上涨的人品数。
    所有输入数据均为正整数。
    输出
    一行一个数k,表示可以获得的最大人品。如不能给每人都卖到套餐,WX 就要悲剧了,此时输出“@_@”(不包含引号)。
    输入示例
    2 3 5
    1 3
    4 7
    3 7
    1 5
    输出示例
    12
    其他说明
    100%的数据保证 N<=10,M<=15,答案<longint

    C++程序:

    #include<iostream>
    using namespace std;
    long int jg[21],a[21][21],js[16][1000];
    long int n,m,k,z=0,maxn,minj=99999;
    void dfs(long int,long int,long int);
    int main()
    {
        cin>>n>>m>>k;
        for(int i=1;i<=n;i++)
        {
            cin>>jg[i];
            if(minj>jg[i]) minj=jg[i];
        }
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++) cin>>a[i][j];
        dfs(0,0,0);
        if(maxn==0) cout<<"@_@";
        cout<<maxn;
    }
    void dfs(long int rp,long int hf,long int tc)
    {
        if(hf>=js[tc][rp]&&js[tc][rp]!=0) return;
        else js[tc][rp]=hf;
        if(hf+(m-tc)*minj>k) return;
        if(tc==m){maxn=max(maxn,rp);return;}
        for(int i=1;i<=n;i++)
            dfs(rp+a[tc+1][i],hf+jg[i],tc+1);
    }
  • 相关阅读:
    SQL Server 复制订阅
    杂谈经验与未来
    泛泰A820L (高通MSM8660 cpu) 3.4内核的CM10.1(Android 4.2.2) 測试版第二版
    hdu1280 前m大的数(数组下标排序)
    Design Pattern Adaptor 适配器设计模式
    ssh命令、ping命令、traceroute 命令所使用的协议
    Android禁止ViewPager的左右滑动
    推荐一款优雅的jquery手风琴特效
    vijos
    iOS 7 UI 过渡指南
  • 原文地址:https://www.cnblogs.com/WHYFRANK/p/4717666.html
Copyright © 2011-2022 走看看