西电1002——小W的塔防

下班回家练习一下, 这道题看上去就是个DP问题,状态迁移方程式是

f(a,b,c) = max(f(a-1,b,,c) + (t+c*z)*(x+b*y), f(a,b-1,c) + (t +c*z)*(b-1)*y, f(a,b,c-1)+(t+(c-1)*z)*y*b)

最后找到最大的值就ok了。算法如下:

#include <stdio.h>


unsigned long long mat[101][101][101];
unsigned long long sumx, sumy, sumz, max;


int main()
{
        int n, x, y, z, t;
        int i, j, k;
        while(scanf("%d%d%d%d%d", &n,&x,&y,&z,&t) != EOF)
        {
            mat[0][0][0] = 0;
            max = 0;
            for(i=0;i<=n;i++)
                for(j=0;j<=n-i;j++)
                    for(k=0;k<=n-i-j;k++)
                    {
                        if (i > 0)
                            sumx = mat[i-1][j][k] + (unsigned long long)(t+k*z)*(j*y+x);
                        else sumx = 0;
                        if (j > 0)
                            sumy = mat[i][j-1][k] + (unsigned long long)(t+k*z)*(j-1)*y;
                        else sumy = 0;
                        if (k > 0)
                            sumz = mat[i][j][k-1] + (unsigned long long)(t+(k-1)*z)*j*y;
                        else sumz = 0;
                        mat[i][j][k] = sumx > sumy ? (sumx > sumz ? sumx : sumz) : (sumy > sumz ? sumy : sumz);


                        if ( max < mat[i][j][k]) max = mat[i][j][k];
                    }
            printf("%llu\n", max);
        }
        return 0;
}

需要注意的是要注意临界条件,用int保存计算结果会越界,所以这里用了long long。

另外比较挫的是刚开始的时候手误把sumz敲成了sumy,所以WA了几次,引以为戒以后。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 习题篇 第一章 回溯 1.1马拦过河卒 1.2出栈序列统计 1.3算24点 1.4冗余依赖 1.5走迷宫 1.6 单向双轨道 1.7.组合的输出 1.8售货员的难题 1.9驾车旅游 1.10关路灯 第二章 递规与递推 2.1遍历问题 2.2产生数 2.3出栈序列统计 2.4计数器 2.5诸侯安置 2.6括号序列 2.7新汉诺塔 2.8排序集合 2.9青蛙过河 2.10电话号码 2.11编码 第三章 贪心 3.1排队接水 3.2智力大冲浪 3.3取火柴游戏 3.4等待时间 3.5加工生产调度 3.6最大乘积 3.7种树 3.8餐巾 3.9马拉松接力赛 3.10线性存储问题 3.11扇区填数 第四章 分治 4.1取余运算 4.2地毯填补问题 4.3平面上的最接近点对 4.4求方程的根 4.5小车问题 4.6黑白棋子的移动 4.7麦森数(NOIP2003) 4.8旅行家的预算(NOIP1999) 4.9飞行计划 第五章 图 5.1医院设置 5.2工程规划 5.3服务器储存信息问题 5.4间谍网络(AGE) 5.5宫廷守卫 5.6K-联赛 5.7机器调度 5.8公路修建 5.9速度限制 第六章 树 6.1排序二叉树 6.2售票系统 6.3树的重量 6.4信号放大器 6.5“访问”术馆 6.6聚会的快乐 6.7重建道路 6.8有线电视网 6.9TWO 第七章 搜索 7.1最多因子数 7.2黑白棋游戏 7.3纵横填字游戏 7.4魔术数字游戏 7.5魔板 7.6三维扫描 7.7拼字游戏 7.8小木棍 7.9WORD 第八章 动态规划 8.1 BLAST 8.2 血缘关系 8.3 LIGNJA 8.4 书的复制 8.5 多米诺骨 8.6 平板涂色 8.7 三角形牧场 8.8 分组 8.9 工程规划 第九章 数学问题 9.1多项式展开系数 9.2 RAIR 9.3盒子与球 9.4取数游戏 9.5磁盘碎片整理 9.6欧几里德的游戏 9.7百事世界杯之旅 9.8倒酒 9.9班级聚会 第十章 杂题 10.1排序 10.2木棍加工 10.3三角形 10.4多边形面积 10.5网线切割 10.6最接近的分数 10.7切孔机 10.8 DOG 10.9 ERP 10.10魔鬼之城 10.11可见矩形 解析篇 第一章 回溯 1.1马拦过河卒 简析 1.2出栈序列统计 简析 1.3算24点 简析 1.4冗余依赖 简析 1.5走迷宫 详解 1.6 单向双轨道 简析 1.7.组合的输出 详解 1.8售货员的难题 简析 1.9驾车旅游 简析 1.10关路灯 详解 第二章 递规与递推 2.1遍历问题 详解 2.2产生数 详解 2.3出栈序列统计 详解 2.4计数器 详解 2.5诸侯安置 详解 2.6括号序列 简析 2.7新汉诺塔 简析 2.8排序集合 简析 2.9青蛙过河 简析 2.10电话号码 简析 2.11编码 简析 第三章 贪心 3.1排队接水 详解 3.2智力大冲浪 详解 3.3取火柴游戏 详解 3.4等待时间 详解 3.5加工生产调度 详解 3.6最大乘积 详解 3.7种树 简析 3.8餐巾 简析 3.9马拉松接力赛 简析 3.10线性存储问题 简析 3.11扇区填数 简析 第四章 分治 4.1取余运算 详解 4.2地毯填补问题 详解 4.3平面上的最接近点对 详解 4.4求方程的根 简析 4.5小车问题 简析 4.6黑白棋子的移动 简析 4.7麦森数(NOIP2003) 简析 4.8旅行家的预算(NOIP1999) 简析 4.9飞行计划 简析 第五章 图 5.1医院设置 详解 5.2工程规划 详解 5.3服务器储存信息问题 详解 5.4间谍网络(AGE) 简析 5.5宫廷守卫 简析 5.6 K-联赛 简析 5.7机器调度 简析 5.8公路修建 简析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值