HDU 1176免费馅饼
来源:互联网 发布:珠海远光软件 编辑:程序博客网 时间:2024/06/06 00:44
这个题目和最基础的那个金字塔型的那种dp问题很类似。定义状态dp[i][j]:表示在i这个时间在j这个位置可以得到的最大的饼的数目;状态转移方程: dp[i][j] = user_max(dp[i + 1][j - 1], dp[i + 1][j], dp[i + 1][j + 1]) + arr[i][j];其中user_max是自己写的一个比较三个数中最大的数的函数,arr[i][j]这个数组用来存储在i这个时间点j这个位置饼的数目。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAX = 1e5 + 5;int arr[MAX][15], dp[MAX][15];int user_max(int a, int b, int c){ return max(max(a, b), c);}int main(){ int n; while (scanf("%d", &n)) { memset(dp, 0, sizeof(dp)); memset(arr, 0, sizeof(arr)); if (n == 0) break; int time, pos, max_time = 0; for (int i = 1; i <= n; ++i) { scanf("%d%d", &pos, &time); arr[time][pos + 1]++; max_time = max(time, max_time); } for (int i = 1; i <= 12; ++i) dp[max_time][i] = arr[max_time][i]; /* for (int i = 1; i <= max_time; ++i) { for (int j = 1; j <= 12; ++j) { printf("%d ", arr[i][j]); } printf("\n"); } */ for (int i = max_time - 1; i >= 1; --i) { for (int j = 1; j <= 12; ++j) { dp[i][j] = user_max(dp[i + 1][j - 1], dp[i + 1][j], dp[i + 1][j + 1]) + arr[i][j]; } } printf("%d\n", user_max(dp[1][5],dp[1][6], dp[1][7])); } return 0;}
0 0
- hdu 1176 免费馅饼
- hdu 1176 免费馅饼
- hdu 1176 免费馅饼
- HDU 1176 - 免费馅饼
- hdu 1176 免费馅饼
- hdu 1176免费馅饼
- hdu 1176 免费馅饼
- HDU 1176 免费馅饼
- hdu 1176 免费馅饼
- HDU 1176 免费馅饼
- hdu 1176 免费馅饼
- hdu - 1176 - 免费馅饼
- HDU 1176 免费馅饼
- HDU 1176 免费馅饼
- hdu 1176 免费馅饼
- HDU 1176 免费馅饼
- 免费馅饼 hdu 1176
- hdu 1176 免费馅饼
- 最长递增子序列
- 1004. Counting Leaves
- ios设计模式之MVC体系
- Memcached主从同步备份负载配置
- Could not find Developer Disk Image
- HDU 1176免费馅饼
- 数据库事务隔离级别
- SDAU 搜索专题 11 Oil Deposits
- Linux下安装JDK1.8
- java jsp 页面读取oracle中number类型科学计数的处理方法
- 最长公共子序列(不连续)
- 简单谈谈java中匿名内部类构造函数-转自脚本之家
- 总结二、MFC消息映射
- iOS设置UILabel的行间距并自适应高度