A. Upload More RAM
题目类型:贪心。
解题思路:将每个RAM放在k秒中的第1秒上传,则上传n个RAM至少需要(k*(n-1)+1)秒。
AC代码:
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n,k;
cin>>n>>k;
cout<<(n-1)*k+1<<'\n';
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
B. K-Sort
题目类型:贪心。
解题思路:根据题意,要使数组a非递减,则对于任意ai,有ai小于等于max(a0,a1,...,ai)(记作Maxi)。要使所用的硬币最少,则ai等于Maxi。每次选尽可能大的k进行操作,则总操作次数Maxd=max(Maxi-ai)。将ai加到Maxi花费Maxi-ai硬币,再加上每次操作额外花费的1硬币,输出答案ans=。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[100005];
void solve(){
int n;
cin>>n;
int Max=0,Maxd=0;
long long ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>Max){
Max=a[i];
}
else{
int d=Max-a[i];
if(d>Maxd){
Maxd=d;
}
ans+=d;
}
}
ans+=Maxd;
cout<<ans<<'\n';
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
C.Basil's Garden
题目类型:贪心,dp。
解题思路:从后往前遍历,第i朵花高度变为0的时间t[i]=max(t[i+1]+1,h[i])。
AC代码:
#include<iostream>
using namespace std;
const int N=100010;
int h[N];
void solve(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i];
}
int t=h[n];
for(int i=n-1;i>=1;i--){
t=max(t+1,h[i]);
}
cout<<t<<'\n';
}
int main()
{
int t;cin>>t;
while(t--){
solve();
}
return 0;
}