• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 联系
  • 订阅
  • 管理

View Post

HDU 1176 免费馅饼 dp

       这题一开始看不知如何dp,看了别人的解题报告才知道是数塔的变形

       dp[i][j] 表示从i~n秒第j个位置获得的最多馅饼数

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

 

#include<iostream>
#define MAX 100005
using namespace std;

int dp[MAX][12];

int main()
{
	int n;
	int x, t;
	int max_t;

	while (cin >> n && n)
	{
		max_t = 0;
		memset(dp, 0, sizeof(dp));
		for(int i = 0; i < n; i++)
		{
			cin >> x >> t;
			dp[t][x]++;
			max_t = max(t, max_t);
		}

		for (int i = max_t-1; i >= 0; i--)
		{
			for (int j = 0; j < 11; j++)
			{
				int hold = dp[i][j];

				for (int k = -1; k < 2; k++)
					if (j+k >= 0 && j+k < 11)
						dp[i][j] = max(dp[i][j], dp[i+1][j+k]+hold);
			}
		}

		cout << dp[0][5] << endl;
		
	}
	return 0;
}

posted on 2010-12-15 20:32  sysuwhj  阅读(483)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3