NC14526. 购物
描述
那么问题来了,你最少需要多少钱才能达成自己的目的呢?
输入描述
第一行两个正整数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
C++(g++ 7.5.0) 解法, 执行用时: 75ms, 内存消耗: 4576K, 提交时间: 2023-05-14 21:14:16
#include<bits/stdc++.h> #define int long long #define N 10005 using namespace std; int n,m,ans,a[N]; multiset<int> s; signed main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) cin>>a[j]; sort(a+1,a+m+1); for(int j=2;j<=m+1;j++) s.insert(a[j-1]+2*(j-1)-1); ans+=*s.begin(); s.erase(s.begin()); } cout<<ans<<endl; }
C++14(g++5.4) 解法, 执行用时: 31ms, 内存消耗: 1560K, 提交时间: 2020-09-24 21:33:42
#include<bits/stdc++.h> using namespace std; const int maxn=310; priority_queue<int, vector<int>, greater<int>> q,tq; int n,m,c[maxn],ans=0; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) cin>>c[j]; sort(c+1,c+1+m); for(int j=1;j<=m;j++) q.push(c[j]+2*j-1); ans += q.top(),q.pop(); } cout<<ans<<endl; }
C++ 解法, 执行用时: 41ms, 内存消耗: 1720K, 提交时间: 2022-04-10 21:31:17
#include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int>,greater<int>>q; int a[350],pp=0; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[j]; } sort(a+1,a+1+m); for(int j=1;j<=m;j++){ q.push(a[j]+2*j-1); } pp+=q.top(); q.pop(); } cout<<pp<<endl; }
Python3 解法, 执行用时: 264ms, 内存消耗: 8264K, 提交时间: 2022-11-29 15:59:52
n,m = map(int,input().split()) b = [] sum = 0 for i in range(n): a = list(map(int,input().split())) a.sort() for j in range(m): b.append(a[j] + 1 + (j * 2)) b.sort(reverse=True) sum += b.pop() print(sum)
pypy3 解法, 执行用时: 754ms, 内存消耗: 33348K, 提交时间: 2022-04-10 13:07:20
n, m = map(int, input().split()) p = [] ans = 0 for _ in range(n): t = sorted(list(map(int, input().split()))) for i in range(m): p.append( t[i] + 1 + (i*2)) p.sort(reverse=True) ans += p.pop() print(ans)