Description

题目背景:
尊者神高达进入了基三的世界,作为一个 mmorpg 做任务是必不可少的,然而跑地图却令人十分不爽。好在基三可以使用轻功,但是尊者神高达有些手残,他决定用梅花桩练习轻功。
题目描述:
一共有 n 个木桩,要求从起点(0)开始,经过所有梅花桩,恰好到达终点 n,尊者神高达一共会 k 种门派的轻功,不同门派的轻功经过的梅花桩数不同,花费时间也不同。但是尊者神高达一次只能使用一种轻功,当他使用别的门派的轻功时,需要花费 W 秒切换(开始时可以是任意门派,不需要更换时间)。由于尊者神高达手残,所以经过某些梅花桩(包括起点和终点)时他不能使用一些门派的轻功。尊者神高达想知道他最快多久能到达终点如果无解则输出-1。

Input

第一行 n,k,W
接下来 k 行,每行为 ai 和 wi 代表第 i 种轻功花费 vi 秒经过 ai 个木桩。
接下来一行 Q 为限制条件数量。
接下来 Q 行,每行为 xi 和 ki 代表第 xi 个梅花桩不能使用第 ki 种门派的轻功经过。

Output

一行答案即所需最短时间。

Sample Input

Sample Input1:
6 2 5
1 1
3 10
2
1 1
2 1Sample Input2:
6 2 5
1 1
3 10
0

Sample Output

Sample Output1:
18样例解释 1:
先用第二种轻功花费 10 秒到 3,再用 5 秒切换到第一种轻功,最后再用 3 秒时间到 6.一共花费 10+5+3=18 秒Sample Output2:
6样例解释 2:
直接花费 6 秒到 6;

Data Constraint

20%的数据 n<=20,k<=10,Q<=200;
对于另外 20%的数据 W=0
对于另外 20%的数据 Q=0
所以数据满足 n<=500,k<=100,Q<=50000,vi<=1e7;
保证数据合法

题解

  • 数据这么小,各位大爷肯定都会做吧
  • 考虑dp,设f[i][j]为走到第i个木桩,现在是用第j中轻功的最小时间
  • 状态转移方程显然
  • 那么,考虑一下题目的条件,有一些限制木桩不能用某些轻功经过
  • 可以设g[i][j]为用j轻功到i有多少个没有的经过的木桩
  • 剩下的平平常常都能A吧

代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5 const long long inf=0x3f3f3f3f3f3f;
 6 int n,k,w,a[510],v[510],Q,g[510][110];
 7 long long f[510][110],ans;
 8 int main()
 9 {
10     //freopen("qinggong.in","r",stdin);
11     //freopen("qinggong.out","w",stdout);
12     scanf("%d%d%d",&n,&k,&w);
13     for (int i=1;i<=k;i++) scanf("%d%d",&a[i],&v[i]);
14     scanf("%d",&Q);
15     for (int i=1,x,y;i<=Q;i++) scanf("%d%d",&x,&y),g[x][y]=1;
16     for (int i=1;i<=k;i++)
17         for (int j=1;j<=n;j++)
18             g[j][i]+=g[j-1][i];
19     memset(f,125,sizeof(f));
20     for (int i=1;i<=k;i++) f[0][i]=0;
21     for (int i=0;i<=n;i++)
22         for (int j=1;j<=k;j++)
23             for (int z=1;z<=k;z++)
24                 if (i+a[z]<=n&&(g[i+a[z]][z]-g[i][z]==0))
25                 {
26                     if (j==z) f[i+a[z]][z]=min(f[i+a[z]][z],f[i][j]+v[z]);
27                     else f[i+a[z]][z]=min(f[i+a[z]][z],f[i][j]+v[z]+w);
28                 }
29     ans=inf;
30     for (int i=1;i<=k;i++) ans=min(ans,f[n][i]);
31     printf("%lld",ans==inf?-1:ans);
32 }

转载于:https://www.cnblogs.com/Comfortable/p/9802517.html

[dp][前缀和] Jzoj P5907 轻功(qinggong)相关推荐

  1. codeforces #274 C. Riding in a Lift dp+前缀和优化

    codeforces #274  C. Riding in a Lift   dp+前缀和优化 Imagine that you are in a building that has exactly  ...

  2. DP + 前缀和 - 牡牛和牝牛 - AcWing 1307

    DP + 前缀和 - 牡牛和牝牛 - AcWing 1307 约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛. 牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决 ...

  3. hdu3336 KMP + DP 前缀数组出现的次数

    题意:       给你一个串,问你他的所有前缀子串在本串中的出现次数,注释:abc的前缀子串是 a ab abc; 思路:      还是利用了next数组,先对子串求出next数组,再开一个数组d ...

  4. 2019.03.30【NOIP提高组】模拟 B 组 排序、二分+spfa、树形DP+前缀和

    文章目录 0 SERN的野望 1 与机关的决战 2 蜡笔 立阳二中.清华经管系贺朝 0 SERN的野望 Error! Human is dead. Mismatch. SERN妄图研发出时间机器,然而 ...

  5. [HNOI2004] 敲砖块(dp + 前缀和)

    P1437 [HNOI2004] 敲砖块 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考文章 [题解][HNOI2004]敲砖块 - gcd & Blog - 洛谷博客 ...

  6. [dp][前缀和][并查集] 洛谷 P3575 DOO-Around the world

    题目描述 After trying hard for many years, Byteasar has finally received a pilot license. To celebrate t ...

  7. [贪心][前缀和] Jzoj P4256 平均数

    Description 给出包含一个N个整数的数组A.找出一段长度至少为K的连续序列,最大化它的平均值. 请注意:一段子序列的平均值是子序列中所有数的和除以它的长度. Input 第一行包含两个整数N ...

  8. [AtCoder Educational DP Contest] V - Subtree(树形dp + 前缀积/后缀积)

    problem luogu 给一棵树,对每一个节点染成黑色或白色. 对于每一个节点,求强制把这个节点染成黑色的情况下,所有的黑色节点组成一个联通块的染色方案数,答案对 MMM 取模. 1≤n≤1e5, ...

  9. jzoj6312-Lottery【dp,前缀和】

    正题 题目大意 给出一个长度为nnn的序列aaa和数字lll,定义两个长度为lll的区间[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]的距离为有 ...

最新文章

  1. 独家 | 展望未来:数据科学、数据工程及技术(附链接)
  2. 主板电源开关接口图解_电脑主板开机电路检修步骤及思路。
  3. fields在php中,phpmysqli_num_fields函数怎么用
  4. Cowboy 源码分析(一)
  5. Qt 中 QXml/QDom*** api设计吐槽
  6. Jenkins配置:添加用户和管理权限
  7. python xlwings api_2021-01-13python,xlwings,api运用,及一些问题
  8. windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
  9. Super VLAN
  10. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
  11. 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)
  12. 电商常用字体_字体商用有风险,侵权罚款上千万!告诉你怎么正确使用
  13. 数据库SQL Server2012笔记(八)——Statement与PreparedStatement的区别,JDBC方式操作数据库...
  14. 拓端tecdat|R语言通过伽玛与对数正态分布假设下的广义线性模型对大额索赔进行评估预测
  15. 计算机中内存存储器最小单位,计算机中存储容量的最小单位和最基本单位是什么?...
  16. BUCK-BOOST反激变压器设计
  17. 论如何用电脑开手游辅助,实现QQ飞车自动跑图
  18. TypeError: from_buffer() cannot return the address of the raw string within a str or unicode or byte
  19. 第三方支付机构是什么
  20. xshell双击无反应

热门文章

  1. python正则表达式函数match()和search()的区别详解
  2. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始
  3. 三角网导线平差实例_导线测量平差实例
  4. ae去黑插件_视频素材如何去黑底?送你这款插件,自动一键去黑底。适用AE、PR...
  5. python怎么打印字典_在python中打印字典的原始输入顺序
  6. 每天一道LeetCode----位运算实现加减乘除四则运算
  7. anaconda mac安装
  8. git reset git stash
  9. CentOS修改SSH端口
  10. java实现数字(摘要)签名,生成签名文件,防止文件被人篡改内容,分析和实现