HDU1176-基础dp-免费馅饼

来源:互联网 发布:单片机的资源 编辑:程序博客网 时间:2024/06/03 23:05

https://vjudge.net/contest/170788#problem/G
看来我也只会写这种基础的dp了qwq
中文题意。
直接递推。
dp[i][j]为i秒j位置的最优解。
而在i秒j位置总共就这几种来源。。找一个最大的。
注意,开始没有注意起始位置,wa了两发。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=1e5+5;int mp[maxn][12];int dp[maxn][12];int main(){   int t;    int a,b;    while(~scanf("%d",&t)){        if(!t) break;        memset(mp,0,sizeof(mp));        int bb=-1;        for(int i=0;i<t;i++){            scanf("%d%d",&a,&b);            mp[b][a]+=1;            bb=max(b,bb);            }            memset(dp,0,sizeof(dp));            dp[1][5]=mp[1][5];            dp[1][4]=mp[1][4];            dp[1][6]=mp[1][6];         for(int i=2;i<=bb;i++){            for(int j=0;j<=10;j++){                if(j>0)                dp[i][j]=max(dp[i-1][j-1],dp[i][j]);               if(j<10)               dp[i][j]=max(dp[i-1][j+1],dp[i][j]);                dp[i][j]=max(dp[i-1][j],dp[i][j]);                dp[i][j]+=mp[i][j];            }         }         int ans=-1;         for(int i=0;i<=10;i++)             ans=max(ans,dp[bb][i]);         printf("%d\n",ans);    }    return 0;}
原创粉丝点击