题意:
在遥远的东方,有一家糖果专卖店。
这家糖果店将会在每天出售一些糖果,它每天都会生产出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()
{iosint 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--购物 动态规划相关推荐

  1. 牛客网NC77-20.7.23-dp(动态规划?)

    链接:牛客网NC77链接 题意: 输入:n,x,a[] (n<=20,x<=100,a[i][0]<=50,a[i][1]<=20) 输出:方法数 分析:想象这些钱是一堆一堆的 ...

  2. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B 来源:牛客网 ...

  3. 牛客网练习赛34-A题

    题目https://ac.nowcoder.com/acm/contest/297/A链接 链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 不知 ...

  4. 牛客网练习赛34-b题

    题目链接https://ac.nowcoder.com/acm/contest/297/B 链接:https://ac.nowcoder.com/acm/contest/297/A?&head ...

  5. 牛客网练习赛15__吉姆的奇思妙想

    吉姆的奇思妙想 题目描述 吉姆是个热爱算法竞赛的小朋友,平常的休闲活动就是刷 牛客网 的题目. 当吉姆刷到  wannafly挑战赛12 F.小H和圣诞树  这题时,颇为震惊,因为这是他第一次在wan ...

  6. 牛客网 - 机器人走方格 (动态规划)

    机器人走方格 解法1(排列组合) 公式:Cx+y−2x−1C_{x+y-2}^{x-1}Cx+y−2x−1​或Cx+y−2y−1C_{x+y-2}^{y-1}Cx+y−2y−1​ 注意点: x和y是方 ...

  7. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  8. 三角形周长和【牛客网】牛客网练习赛60

    题目传送 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 输入描述 第一行一个整 ...

  9. 牛客网练习赛24B 凤凰

    题目链接 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 凤凰于飞,翙翙其羽,亦集爰止.凤 ...

最新文章

  1. shell python优势_python的优势
  2. jQuery EasyUI API 中文文档 - DataGrid 数据表格
  3. 通俗易懂!使用Excel和TF实现Transformer
  4. 2021-01-22 使用 Docker 打包 Python 项目
  5. Java单例模式双重检查锁定中volatile关键字的作用
  6. numpy更改形状、类型
  7. 设计模式学习五、代理模式
  8. axure 8.0 注册码
  9. matlab中非线性误差分析方法,matlab计算方法实验指导误差分析
  10. TRS专题制作选件手册
  11. 本周内外盘行情回顾2022.4.24(下周提保、2205结束、节后美联储降息,预计波动加剧)
  12. linux安装gcc5.4教程,arm-linux-gcc-5.4.0安装方法
  13. 计算机关机时出现计划,如何在win7计算机上设置自动关机命令
  14. 二、VLAN,单臂路由
  15. NOI 4.5 动态规划 1980: 陪审团的人选
  16. linux trac apache,Ubuntu下集成Apache+Trac+Git
  17. 大班科学计算机的发明应用教案,大班科学活动神奇的圈教案
  18. Fourth Point !!
  19. #最详细# Github Page 个人博客绑定二级域名
  20. 永远的忧郁王子,永远的巴乔

热门文章

  1. APS:大型多模态室内摄像机定位系统
  2. 图像配准的前世今生:从人工设计特征到深度学习
  3. 2019年2月26日 Unique Email Addresses、To Lower Case、Encode and Decode TinyURL
  4. call和apply
  5. SQL-PL/SQL基础
  6. 《从缺陷中学习C/C++》——6.15 试图产生的指针很可能不存在
  7. DB2 XQuery学习笔记
  8. 让烦恼走开 两招让移动硬盘插拔自如
  9. matlab生产正弦mif文件
  10. linux服务器读写硬盘io,查看linux服务器硬盘IO读写负载