• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
mengxm
博客园    首页    新随笔    联系   管理    订阅  订阅

hdu1176

http://acm.hdu.edu.cn/showproblem.php?pid=1176

经典动规模型数塔的变形,将馅饼落下的位置看做数塔中的列数,而将下落时间看做数塔中的行数,问题转化为求解从塔底到塔顶的最长路径。

从此题中可以看出数塔模型的每一个节点都有两个属性:行数和列数,碰到类似有两个属性的动规时可以考虑。

ps:此题可以向下走三个方向。

1 #include<stdio.h>
2 #include<memory.h>
3  int sum[100001][13];
4 #define maxer(a,b) ((a)>(b)?(a):(b))
5 int max(int a,int b,int c)
6 {
7 return maxer(a,b)>maxer(b,c)?maxer(a,b):maxer(b,c);
8 }
9 int main()
10 {
11 int num;
12 while(scanf("%d",&num)==1&&num)
13 {
14 memset(sum,0,sizeof(sum));
15 int a,b,maxsec=0;
16 for(int i=0;i<num;i++)
17 {
18 scanf("%d %d",&a,&b);
19 sum[b][a+1]++;
20 maxsec=maxsec>b?maxsec:b;
21 }
22 for(int i=maxsec-1;i>=0;i--)
23 for(int j=11;j>=1;j--)
24 sum[i][j]+=max(sum[i+1][j],sum[i+1][j-1],sum[i+1][j+1]); //从三个方向中寻找权值最大的方向
25 printf("%d\n",sum[0][6]);
26 }
27 return 0;
28 }
posted @ 2011-06-04 22:32  mengxm  阅读(671)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3