HDU-2577 How to Type || HDU-2845 Beans

来源:互联网 发布:手机视频文件加密软件 编辑:程序博客网 时间:2024/06/06 05:57

题目:

2道类型相似的dp。

HDU-2845 Beans:

题意:

给出一个二维数字矩阵,其中每个点存放着豆子,求出能够吃到的最大豆子数

要求:每吃一个格子里的豆子,这个格子两边的两格和上下两行都不能吃了。

思路:

每个点都只有吃或不吃两种状态,两个数组分别储存吃与不吃该点时的最优解。

求出每一行的最优解之后看作一列求整体最优解。

代码:

#define N 212345int n,m;int flag,sum,ave,ans,res;int a[N],b[N];int f[N];int main(){    int i,j,k,kk,t,x,y,z;    while(scanf("%d%d",&n,&m)!=EOF&&n)    {        for(i=1;i<=n;i++)        {            a[0]=b[0]=0;            for(j=1;j<=m;j++)            {                scanf("%d",&t);                a[j]=max(a[j-1],b[j-1]);                b[j]=a[j-1]+t;            }            f[i]=max(a[m],b[m]);        }        a[0]=b[0]=0;        for(i=1;i<=n;i++)        {            a[i]=max(a[i-1],b[i-1]);            b[i]=a[i-1]+f[i];        }        printf("%d\n",max(a[n],b[n]));    }    return 0;}



HDU-2577 How to Type:

题意:

给出一个字符串,其中有大写有小写,输入大写字母时需要打开CapsLock灯或者加按shift,小写字母相反,

求输入这一组数据共需最少按多少次按键,开始和结束时Capslock必须关闭。

思路:

遇上一题类似,按到每个字符前只有灯开与不开两种状态,以及结束时灯开与不开两种状态,共4种状态。

分别储存按到每一个字符时灯开与不开情况下的最优解,dp思想解决。

代码:

#define N 112345int n,m;int flag,sum,ave,ans,res;int a[N],b[N];char s[101];int main(){    int i,j,k,kk,t,x,y,z;    scanf("%d",&k);    while(k--)    {        scanf("%s",s);        sum=0;        n=strlen(s);        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        b[0]=1;        for(i=1;i<=n;i++)        {            if(s[i-1]<='z'&&s[i-1]>='a')            {                a[i]=min(a[i-1]+1,b[i-1]+2);                b[i]=min(a[i-1]+2,b[i-1]+2);            }            else            {                a[i]=min(a[i-1]+2,b[i-1]+2);                b[i]=min(a[i-1]+2,b[i-1]+1);            }        }        printf("%d\n",min(a[n],b[n]+1));    }    return 0;}



0 0