吃土豆

来源:互联网 发布:提高工作效率的软件 编辑:程序博客网 时间:2024/05/17 03:53
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <map>using namespace std;int dp[510],save[510][510],m,n;int main(){     while(~scanf("%d%d", &n,&m)) {     memset(dp, 0, sizeof(dp));     memset(save, 0, sizeof(save));     for(int i =3; i<n+3; i++)       for(int j =3; j<m+3; j++)       {          scanf("%d", &save[i][j]);          save[i][j]+=max(save[i][j-2],save[i][j-3]);       }       for(int i =3; i<n+3; i++)         dp[i]=max(dp[i-2],dp[i-3])+max(save[i][m+1],save[i][m+2]);    printf("%d\n", dp[n+2]); }    return 0;}

第二种方法

#include <stdio.h>#include <string.h>#include <algorithm>#include <stack>using namespace std;int  dp[520],map[520];int main(){    int n,m;    while(~scanf("%d%d", &n, &m))    {        memset(dp,0,sizeof(dp));        memset(map,0,sizeof(map));        for(int i =1; i<=n; i++)          {              scanf("%d", &dp[1]);              for(int j =2; j<=m; j++)              {                  int t;                  scanf("%d", &t);                  dp[j]=max(dp[j-1],dp[j-2]+t);              }              map[i]=dp[m];          }         dp[1]=map[1];          for(int i =2;i<=n; i++)          {              dp[i]=max(dp[i-1],dp[i-2]+map[i]);          }          printf("%d\n", dp[n]);    }    return 0;}