3 条题解
-
2
可以理解为还是只有1个人接水,但是他接的时候也帮后面R-1个人接水了
#include<bits/stdc++.h> #include<map> using namespace std; int j,k,p[500],p2[500],rp=0,min1=10000000; int n,m,ans; int num; int main() { cin>>n>>m; k=n;//现在有n个人等待 for(int i=1;i<=n;i++) { cin>>p[i]; } sort(p+1,p+n+1); for(int i=1;i<=n;i++) { ans+=p[i]*k;//ans+等待人数*等待时间 for(int j=i+1;j<=i+m-1;j++) p[j]-=p[i];//帮后人接水 k--;//接完我走啦当然少了一个人 } cout<<ans; }
-
2
using namespace std; int s[101]={0}; int a[101]={0}; int main() { int n,r; cin>>n>>r; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a,a+n+1); int j=0,min1=0; for(int i=1;i<=n;i++) { j++; if(j==r+1) j=1; s[j]+=a[i]; min1+=s[j]; } cout<<min1; return 0; }
不多说了基础题 所用时间最长的人放最后一定是最优的 所以排序就行了
-
1
废话不多说,直接上程序
#include<bits/stdc++.h> using namespace std; int main() { freopen("water1.in","r",stdin); freopen("water1.out","w",stdout); int n,m,sum=0; cin>>n>>m; int a[n],b[m]; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<m;i++) b[i]=0; sort(a,a+n); for(int i=0;i<n;i++){ sort(b,b+m); sum+=b[0]; b[0]+=a[i]; } for(int i=0;i<m;i++) sum+=b[i]; cout<<sum; return 0; }
看完点赞(⊙o⊙)
- 1
信息
- ID
- 441
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 65
- 已通过
- 31
- 上传者