本文主要是介绍HDU-1176 免费馅饼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原题链接:
https://vjudge.net/problem/HDU-1176
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;int main()
{//逆转时间,最后a[0][5](初始位置)即为最后答案int a[100001][20]; //a[t][x] 在t时刻移动到x位置的馅饼数量int n;//最大时间while (cin >> n && n){//因为有多组数据 所以要初始化int maxt = 0;memset(a, 0, sizeof(a));for (int i = 0; i < n; i++){int x, t;cin >> x >> t;a[t][x]++;if (maxt < t)maxt = t;}for (int i = maxt - 1; i >= 0; i--){for (int j = 0; j <= 10; j++){//某一时刻的某一位置能拿到的最大数量等于//它上一秒钟周围三个地方能拿到的最大数量(已经拿到的)加它本身(将拿到的)int temp;temp = max(a[i + 1][j - 1], a[i + 1][j]);temp = max(temp, a[i + 1][j + 1]);a[i][j] += temp;}}cout << a[0][5] << endl;}
}
网上大佬的思路,逆向dp,着实牛逼,跪了Orz
这篇关于HDU-1176 免费馅饼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!