• P2079 烛光晚餐


    题目背景

    小明准备请小红去一家咖啡厅,共进烛光晚餐。小红高兴地和他一起去了咖啡厅。

    题目描述

    小红说:“小明,你点菜吧。”小明看到菜单上有N道菜,每道菜的价格是Ci。小明对每道菜的喜爱程度是Xi,小红对每道菜的喜爱程度是Yi。(喜爱程度可能为负数)(小明:以我对她的了解,我给你的数据不会错的)

    小明带了V元钱,他点的菜的总价格不能超过V(小明:当然得我请客啦,显得我大方。)

    小明希望让小红吃得开心,所以当然要让她的总喜爱程度尽量大。当然,小明也要考虑自己的感受,点的所有菜的总喜爱程度需要大于等于0。(小明:要是我吃得不好,她看见我会难过的)

    请你帮小明写一个程序,计算出他的总喜爱程度大于等于0的前提下,小红的喜爱程度的最大值。(小明:你的程序一定要靠谱啊,我得给她一个好印象)

    输入输出格式

    输入格式:

    第1行,两个正整数N,V。

    之后N行,每行3个空格隔开的正整数Ci,整数Xi,Yi。

    输出格式:

    一行,一个正整数,表示他的总喜爱程度大于等于0的前提下,小红的喜爱程度的最大值。如果这个最大值小于0,输出-1.

    #include<bits/stdc++.h>
    using namespace std;
    int vt,n,v,m,h,f[2100][2100][2];
    int main()
    {
        cin>>n>>vt;
        for(int i=0;i<=vt;i++)
        for(int j=-600;j<=600;j++)f[i][j+1000][1]=f[i][j+1000][0]=-1e8;
        f[0][1000][0] = 0;
        for(int i=1;i<=n;i++)
        {
            cin>>v>>m>>h;
            int i1=i&1,i2=i&1^1;
            for(int j=0;j<=vt;j++)
            for(int k=-500;k<=500;k++)
            {
                f[j][k+1000][i1]=max(f[j][k+1000][i1],f[j][k+1000][i2]);
                if(j>=v)f[j][k+1000][i1]=max(f[j][k+1000][i1],f[j-v][k-m+1000][i2]+h);
            }
        }
        int ans=-1;
        for(int j=0;j<=vt;j++)
        for(int i=0;i<=500;i++)
        ans=max(ans,f[j][i+1000][n&1]);
        if(ans<0)ans=-1;
        cout<<ans;
    }
  • 相关阅读:
    20200302 数据分析之numpy以及Jupyter
    20200228 scrapy高级使用及分布式
    20200226 请求库selenium
    20200224 爬虫-requests模块
    0219 请求上下文解析与g对象
    Matlab矩阵求导和求梯度有什么不同
    矩阵中范数的处理方式
    如何巧妙地使用递归
    遗传算法求最短路径
    nparray的维度和取值方式
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/10887256.html
Copyright © 2020-2023  润新知