Probl

来源:互联网 发布:mac redis可视化工具 编辑:程序博客网 时间:2024/06/09 18:30

概述:有0-10十个位置的点,起始点在5,现在每秒在任意位置掉馅饼,每秒人物可以移动一步,求最多能够收集多少馅饼。

思路:dp的题目,设立一个数组用来储存某一秒掉到某点的馅饼,最后求最大值,满足就可以。

感想:上午在机房做的题,然后因为编译器的原因,晚上才改了改题目,上交,提交两遍,wa,不清楚原因,然后把代码重新写了一遍,ce,掉了头文件。。。改完上交成功,这道题上交路程充满坎坷。。。

#include<iostream> #include<algorithm>#include<fstream>#include<cmath>#include<string.h>using namespace std;#define MAX 100001int pie[MAX][12];int dp[MAX][12];int max(int a, int b){if (a > b)return a;else return b;}int main() {//ifstream cin("in.txt");int n;while (cin>>n&& n) {memset(pie, 0, sizeof(pie));memset(dp, 0, sizeof(dp));int x, T, maxT = 0, PIE = 0;while (n--) {cin >> x >> T;++pie[T][x];maxT = max(maxT, T);}dp[1][4] = pie[1][4];dp[1][5] = pie[1][5];dp[1][6] = pie[1][6];for (int i = 2; i <= maxT; ++i) {for (int j = 0; j < 11; ++j) {dp[i][j] = dp[i - 1][j];if (j > 0)dp[i][j] = max(dp[i][j], dp[i - 1][j - 1]);if (j < 10)dp[i][j] = max(dp[i][j], dp[i - 1][j + 1]);dp[i][j] += pie[i][j];}}for (int i = 0; i < 11; ++i)PIE = max(PIE, dp[maxT][i]);cout << PIE << endl;}return 0;}



0 0