牛客网练习赛7--购物 动态规划

购物

https://ac.nowcoder.com/acm/problem/14526

题意:
在遥远的东方,有一家糖果专卖店。
这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元。
现在的你想要在接下来的n天去糖果店进行选购,你每天可以买多个糖果,也可以选择不买糖果,但是最多买m个。(因为最多只生产m个)买来糖果以后,你可以选择吃掉糖果或者留着之后再吃。糖果不会过期,你需要保证这n天中每天你都能吃到至少一个糖果。
这家店的老板看你经常去光顾这家店,感到非常生气。(因为他不能好好睡觉了)于是他会额外的要求你支付点钱。具体来说,你在某一天购买了 k 个糖果,那么你在这一天需要额外支付 k2 的费用。
那么问题来了,你最少需要多少钱才能达成自己的目的呢?

题解:

动态规划+贪心
因为题目要求的是花最少的钱,所以首先我们只买能满足要求的最少的糖果,也就是n个
其次,我们要先买每天便宜的糖果,所以我们把每天提供的糖果进行排序,方便处理
但是,题目给了一个限定条件 “你在某一天购买了 k 个糖果,那么你在这一天需要额外支付 k² 的费用。”根据这句话,我们得知这题需要用dp来进行做。
dp[i][j]表示 表示第i天总共买j个糖果的最低价格
1.第一维我们枚举天数

2.第二维我们枚举总共买了多少个糖果:这里有一点要注意

for(int j=i;j<=min(n,i*m);j++)

为什么这样写呢,n=3 m=2的情况,第一天只有两个糖果,所以我们只能买两个糖果也就是1*2=2

3.第三维枚举 在这些天前,我们买了多少个糖果
也就是在这天,我们买了 j - k 个糖果

因为你需要保证这n天中每天你都能吃到至少一个糖果,所以要注意第三维的起始糖果数。

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
#include <queue>
#include <string>
//#define int long long
#define ios std::ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);
#define endl '\n'
const int maxn = 310;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1e9+7;
const double pi=acos(-1);
using namespace std;
int a[maxn][maxn];
int dp[maxn][maxn];
int main()
{
    ios
    int n,m;
    cin>>n>>m;
    memset(dp,MaxN,sizeof dp);
    for(int i=1;i<=n;i++){
       for(int j=1;j<=m;j++) cin>>a[i][j];
       sort(a[i]+1,a[i]+m+1);
       for(int j=1;j<=m;j++) a[i][j]+=a[i][j-1];
    }
    dp[0][0]=0;
    for(int i=1;i<=n;i++){
        for(int j=i;j<=min(n,i*m);j++){
            for(int k=i-1;k<=j;k++){
                dp[i][j]=min(dp[i][j],dp[i-1][k]+a[i][j-k]+(j-k)*(j-k));
            }
        }
    }
    cout<<dp[n][n]<<endl;
    return 0;
}
题解 文章被收录于专栏

主要写一些题目的题解

全部评论
这代码好像也错了,兄弟,你可以跑一下这组数据: 7 5 174 303 346 131 219 170 13 475 322 84 130 464 469 417 21 11 446 176 447 24 166 339 277 275 180 440 47 263 180 408 279 43 281 216 339 答案是299 错在第三重循环k应该从max(i-1,j-m)开始才对
点赞
送花
回复
分享
发布于 2020-08-25 17:44

相关推荐

投递字节跳动等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务