标签:
题目:
Description
Input
Output
Sample Input
6 5 1 4 1 6 1 7 2 7 2 8 3 0
Sample Output
4
这个题目很明显就是动态规划了,而且递推式也很简洁,很简单。
代码:
#include<iostream> #include<stdio.h> using namespace std; int n, x, t; int num[100001][11]; int get(int i, int j) { int r = num[i - 1][j]; if (j && r < num[i - 1][j - 1])r = num[i - 1][j - 1]; if (j < 10 && r < num[i - 1][j + 1])r = num[i - 1][j + 1]; return r; } int main() { while (scanf("%d", &n)) { if (n == 0)break; for (int j = 0; j <= 100000; j++)
for (int i = 0; i < 11; i++)num[j][i] = 0; for (int i = 1; i <= n; i++) { scanf("%d%d", &x, &t); if (x >= 5 - t && x <= 5 + t)num[t][x] ++; } for (int j = 1; j <= 100000; j++)
for (int i = 0; i < 11; i++)num[j][i] += get(j, i); int maxx = 0; for (int i = 0; i < 11; i++)
if (maxx < num[100000][i])maxx = num[100000][i]; printf("%d\n", maxx); } return 0; }
不管输入的是什么样的,程序是不需要排序的。
这个代码还可以继续优化时间,好多地方不需要用到100000,看输入的数据决定需要弄多大。
不过这个也就92ms就AC了,懒得再改了。
有一个地方需要注意,如果输入的n个馅饼中,其中1个是3,1,那这个馅饼是绝对接不到的。
这种情况需要区分开来,处理方法就是直接忽略不计数就好了。
判定条件是x >= 5 - t && x <= 5 + t,满足这个的都是可以接到的馅饼,不满足的都是接不到的。
标签:
原文地址:http://blog.csdn.net/nameofcsdn/article/details/52239247