DP 水题,唯一注意的是数组开成char 了,超了范围一直WA
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define PINF 0x7FFFFFFF
#define NINF -0x7FFFFFFF
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
char a[105];
int r[105][2];//char范围128,很容易就超,下次注意
int main()
{
int i,t,la;
scanf("%d",&t);
while(t--)
{
memset(r,0,sizeof(r));
memset(a,0,sizeof(a));
scanf("%s",a);
la=strlen(a);
r[0][0]=0;
r[0][1]=1;
for(i=1;i<=la;i++)
{
if(a[i-1]>='A'&&a[i-1]<='Z')
{
r[i][0]=min(r[i-1][0]+2,r[i-1][1]+2);
r[i][1]=min(r[i-1][0]+2,r[i-1][1]+1);
}
else
{
r[i][0]=min(r[i-1][0]+1,r[i-1][1]+2);
r[i][1]=min(r[i-1][0]+2,r[i-1][1]+2);
}
}
printf("%d\n",min(r[la][0],r[la][1]+1));
}
return 0;
}