动态规划入门(三)

来源:互联网 发布:Centos安装jdk 编辑:程序博客网 时间:2024/06/05 20:40

例1.挖地雷
这是一道经典的题目,重要的是设状态。
我们设f[i]表示以第i个地窟开始挖地雷所能得到的最大效应,这是不难写出状态转移方程!

#include<stdio.h>#include<stdlib.h>#include<string.h>int a[1001],b[1001][1001],f[1001],p[1000001];int main(){    int i,j,k,n,m;    scanf("%d",&n);    for(i=1;i<=n;i++)scanf("%d",&a[i]);    while(!feof(stdin)){        int x,y;        scanf("%d%d",&x,&y);        if(x==0 && y==0)break;        b[x][y]=1;    }    int ans=0;    for(i=n;i>=1;i--){        f[i]=a[i];        for(j=i+1;j<=n;j++)            if(b[i][j] && f[j]+a[i]>f[i]){                f[i]=a[i]+f[j];p[i]=j;            }        if(f[i]>f[ans])ans=i;    }    k=ans;    printf("%d",ans);ans=p[ans];    while(ans!=0){        printf("-%d",ans);        ans=p[ans];    }    printf("\n%d\n",f[k]);    return 0;}

推荐几篇动态规划的博客
六,五,四,三,二,一

0 0
原创粉丝点击