题解:B4187 [中山市赛 2024] 糖果共享
这里提供一个迭代的思路。
题意
有
思路
考虑 DP,
则得到状态转移方程:
写完代码,一提交,WA 了。
考虑这样一组样例:
4
100 100 100 1
1 1 1 1
4
1 2 3 4
我的输出:
2 100 100 1
正确输出:
2 3 4 1
这是因为当前
可以记录一个
关于时间复杂度:
理论上如果一次只更新一个位置的话,时间复杂度是
Code
#include<bits/stdc++.h>
#define double long double
#define bug cout<<"___songge888___"<<'\n';
using namespace std;
int n;
int t[200010],dp[200010];
int p[200010];
int q;
int flag;
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>t[i];
dp[i]=t[i];
}
for(int i=1;i<=n;i++){
cin>>p[i];
}
flag=1;
while(flag){
flag=0;
for(int i=2;i<=n;i++){
if(dp[i]>dp[i-1]+p[i-1]){
flag=1;
dp[i]=dp[i-1]+p[i-1];
}
}
if(dp[1]>dp[n]+p[n]){
flag=1;
dp[1]=dp[n]+p[n];
}
}
cin>>q;
while(q--){
int x;
cin>>x;
cout<<dp[x]<<'\n';
}
return 0;
}
提交记录