NC14526 购物

购物

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

购物

题目地址:

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

基本思路:

考虑,设表示处理到第天,买了个糖果的最小花费;
首先我们在每一天里,肯定是优先买价格更低的糖果,因此我们先对每一天排序,并且求一个前缀和;
然后我们考虑如何转移,首先我们第天的合法糖果数一定要在之间(每天都要有至少一个糖果,且最多不过是全买);
然后我们在上下两天的糖果数里进行转移,
设当前第天我买了的糖果数为,前一天买了的糖果数为
那么意味着我们当天购买的糖果数为,那这个糖果的最小花费很明显应该为
所以根据以上我们可以得到如下转移方程:

,

最多只要个糖果,所以我们糖果数的枚举上限应该为,然后就是我们要的答案了。

参考代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
#define IO std::ios::sync_with_stdio(false); cin.tie(0)
#define int long long
#define SZ(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rep(i, l, r) for (int i = l; i <= r; i++)
#define per(i, l, r) for (int i = l; i >= r; i--)
#define mset(s, _) memset(s, _, sizeof(s))
#define pb push_back
#define pii pair <int, int>
#define mp(a, b) make_pair(a, b)
#define INF (int)1e18

inline int read() {
  int x = 0, neg = 1; char op = getchar();
  while (!isdigit(op)) { if (op == '-') neg = -1; op = getchar(); }
  while (isdigit(op)) { x = 10 * x + op - '0'; op = getchar(); }
  return neg * x;
}
inline void print(int x) {
  if (x < 0) { putchar('-'); x = -x; }
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}

const int maxn = 310;
int n,m,a[maxn][maxn],sum[maxn][maxn],dp[maxn][maxn];
signed main() {
  IO;
  cin >> n >> m;
  rep(i, 1, n) {
    rep(j, 1, m) cin >> a[i][j];
    sort(a[i] + 1, a[i] + 1 + m);
  }
  rep(i, 1, n) {
    sum[i][0] = 0;
    rep(j, 1, m) sum[i][j] = sum[i][j - 1] + a[i][j];
  }
  mset(dp, 0x3f);
  dp[0][0] = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= min(i * m, n); j++) {
      for (int k = max(i - 1, j - m); k <= min((i - 1) * m, j); k++) {
        dp[i][j] = min(dp[i][j], dp[i - 1][k] + sum[i][j - k] + (j - k) * (j - k));
      }
    }
  }
  cout << dp[n][n] << '\n';
  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)开始才对
2 回复 分享
发布于 2020-08-25 17:45

相关推荐

评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务