这道题运用DP的解法,大致思路是我为人人。
定义状态
f[i][0] 表示为前i个格子,最终大写锁定为小写的最小值。
f[i][1] 表示为前i个格子,最终大写锁定为大写的最小值。
推导转移式
当a[i]为小写时
f[i][0]=min(f[i-1][0]+1,f[i-1][1]+2);
f[i][1]=min(f[i-1][0]+2,f[i-1][1]+2);
当a[i]为大写时
f[i][0]=min(f[i-1][0]+2,f[i-1][1]+2);
f[i][1]=min(f[i-1][0]+2,f[i-1][1]+1);
初始状态 f[0][0]=0 f[0][1]=1
核心程序
f[0][0]=0,f[0][1]=1; for(int i=1;i<=len;i++) { if(a[i]) { f[i][0]=min(f[i-1][0]+1,f[i-1][1]+2); f[i][1]=min(f[i-1][0]+2,f[i-1][1]+2); } else { f[i][0]=min(f[i-1][0]+2,f[i-1][1]+2); f[i][1]=min(f[i-1][0]+2,f[i-1][1]+1); } }
原文:https://www.cnblogs.com/nhflsoiers/p/12748054.html