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;
}
浙公网安备 33010602011771号