zoukankan      html  css  js  c++  java
  • hdu 1176 免费馅饼(nyist 613)

    http://acm.hdu.edu.cn/showproblem.php?pid=1176

    dp[i][j]:表示第i秒接j位置的馅饼的最大值。

    三种状态:

    dp[i][j]=max(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1])+a[i][j]

    分别是上一秒接j位置上一秒接j-1位置上一秒接j+1位置

    注意数组初始化。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int dp[100005][11],a[100005][11];
    int main(int argc, char *argv[])
    {
    	int n,i,j,id,t,maxt,ans;
    	while(cin>>n&&n)
    	{
    		memset(a,0,sizeof(a));
    		for(maxt=0,i=1;i<=n;i++)
    		{
    			cin>>id>>t;
    			a[t][id]++;
    			if(maxt<t) maxt=t;
    		}
    		for(i=1;i<=maxt;i++)
    		for(j=0;j<=10;j++)
    			dp[i][j]=-1000000005;
    		dp[1][4]=a[1][4]; dp[1][5]=a[1][5]; dp[1][6]=a[1][6];
    		int x1,x2,x3;
    		for(i=2;i<=maxt;i++)
    		for(j=0;j<=10;j++)
    		{
    			x1=dp[i-1][j]+a[i][j];
    			if(j-1>=0) x2=dp[i-1][j-1]+a[i][j]; else x2=-1000000005;
    			if(j+1<=10) x3=dp[i-1][j+1]+a[i][j]; else x3=-1000000005;
    			if(x1<x2) x1=x2;
    			if(x1<x3) x1=x3;
    			dp[i][j]=x1;
    			//cout<<i<<" -> "<<j<<" "<<dp[i][j]<<endl;
    		}
    		for(ans=i=0;i<=10;i++)
    		{
    			if(dp[maxt][i]>ans) ans=dp[maxt][i];
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }



  • 相关阅读:
    第一次团队作业
    第二次结对作业
    第一次结对作业
    制作简易的中文编译器
    第一次博客作业
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程作业
  • 原文地址:https://www.cnblogs.com/james1207/p/3265245.html
Copyright © 2011-2022 走看看