CF. Minimum Grid Path(思维)
题意:
你从
(
0
,
0
)
(0,0)
(0,0) 走到
(
n
,
n
)
(n,n)
(n,n) 只能
u
p
/
r
i
g
h
t
up/right
up/right 。每次最多走n步,且走完后方向转变,最多只能转变( n − 1 ) 次,所以就有n个 线段权值 ,代表第K次走的每一步的权值。问最小花费 。
思路:
从2到n枚举次数,假设当前步走到n结束。奇偶分开算
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=1e9+7;
const int maxn=1e5+5;
ll ans,a[maxn],m1,m2,n,d1,d2,p[maxn];
int t,k1,k2;
int main(){
scanf("%d",&t);
while(t--){
a[0]=inf;ans=1e18+5;
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
if(i==1||i==2)p[i]=a[i];
else{
if(i&1)p[i]=min(a[i],p[i-2]);
else p[i]=min(a[i],p[i-2]);
}
}
ll he=a[1];
for(ll i=2;i<=n;i++){
he+=a[i];
if(i&1)ans=min(ans,he+p[i]*(n-(i+1)/2)+p[i-1]*(n-i/2));
else ans=min(ans,he+p[i]*(n-i/2)+p[i-1]*(n-i/2));
}
printf("%lld\n",ans);
}
}