日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【每日一题】8月4日题目精讲—购物

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【每日一题】8月4日题目精讲—购物 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:牛客網:

文章目錄

    • 購物
    • 題目描述
    • 題解:
    • 代碼:

購物

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld

題目描述

在遙遠的東方,有一家糖果專賣店。 這家糖果店將會在每天出售一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果價格為C[i][j]元。
現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。(因為最多只生產m個)買來糖果以后,你可以選擇吃掉糖果或者留著之后再吃。糖果不會過期,你需要保證這n天中每天你都能吃到至少一個糖果。
這家店的老板看你經常去光顧這家店,感到非常生氣。(因為他不能好好睡覺了)于是他會額外的要求你支付點錢。具體來說,你在某一天購買了 k
個糖果,那么你在這一天需要額外支付 k2 的費用。 那么問題來了,你最少需要多少錢才能達成自己的目的呢?

輸入描述:
第一行兩個正整數n和m,分別表示天數以及糖果店每天生產的糖果數量。
接下來n行(第2行到第n+1行),每行m個正整數,第x+1行的第y個正整數表示第x天的第y個糖果的費用。
輸出描述:
輸出只有一個正整數,表示你需要支付的最小費用。
示例1
輸入
復制

3 2 1 1 100 100 10000 10000

輸出
復制

107

示例2
輸入
復制

5 5 1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4

輸出
復制

10

備注:
對于100%的數據,1 ≤ n, m ≤ 300 , 所有輸入的數均 ≤ 106

題解:

根據題意,我們一天最少吃一個,那我們只需要買n個就行
dp[i][j]表示第i天總共買j個糖果的最低價格
枚舉第i天買了多少糖果
dp[i][j]=min(dp[i-1][j-k]+sum[i][k]+(k)*(k))
(k從0到j枚舉)
前i-1天買了j-k個糖果,第i天就買k個糖果

代碼:

#include <bits/stdc++.h> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; int a[550][550]; ll sum[550][550],f[550][550],n,m; int main() {memset(f,0x3f,sizeof f);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>a[i][j];sort(a[i]+1,a[i]+1+m);for(int j=1;j<=m;j++)sum[i][j]=sum[i][j-1]+a[i][j];}f[0][0]=0;for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)for(int k=0;k<=j&&k<=m;k++)if(f[i-1][j-k]!=0x3f3f3f3f)f[i][j]=min(f[i][j],f[i-1][j-k]+sum[i][k]+k*k);cout<<f[n][n]<<endl;return 0; }

總結

以上是生活随笔為你收集整理的【每日一题】8月4日题目精讲—购物的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。