博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1070 道路游戏
阅读量:6332 次
发布时间:2019-06-22

本文共 1065 字,大约阅读时间需要 3 分钟。

f[i]为第i秒获得的最大值

f[j] = max(f[j-k] + sum - cost[pos])

表示从当前世界是j,从pos走k步到当前点i的最大价值
注意这里的sum可以利用前面的值逐步累加。
我开始做的时候没有想到这一点单独求,然后就超时了。
同时要注意循环的循序问题。

#include
#include
#include
#include
#define REP(i, a, b) for(int i = (a); i < (b); i++)#define _for(i, a, b) for(int i = (a); i <= (b); i++)using namespace std;const int MAXN = 1123;int f[MAXN], money[MAXN][MAXN];int cost[MAXN], n, m, p;void read(int& x){ int f = 1; x = 0; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-1') f = -1; ch = getchar(); } while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } x *= f;}int main(){ read(n); read(m); read(p); REP(i, 0, n) _for(j, 1, m) read(money[i][j]); REP(i, 0, n) read(cost[i]); memset(f, 0xc0, sizeof(f)); f[0] = 0; _for(j, 1, m) REP(i, 0, n) { int pos = (i - 1 + n) % n; int sum = money[pos][j]; _for(k, 1, min(j, p)) { f[j] = max(f[j], f[j-k] + sum - cost[pos]); pos = (pos - 1 + n) % n; sum += money[pos][j-k]; } } printf("%d\n", f[m]); return 0;}

 

转载于:https://www.cnblogs.com/sugewud/p/9819366.html

你可能感兴趣的文章
Android各个发行版本对应使用的SQLite版本
查看>>
5、canvas绘制文本
查看>>
Python 学习- 列表,字符串,数据操作和字典
查看>>
免费ERP产品实施失败高层决策者存在的问题
查看>>
洗牌程序
查看>>
IOS开发之masonry的基本使用
查看>>
关于HTTP请求
查看>>
Git重命名
查看>>
JAVA序列化 框架 Kryo
查看>>
关机流程实现灭屏和振动同步,灭屏即完成关机流程
查看>>
java开发fastDfs分布式存储系统时连接问题
查看>>
NETWORK_TYPE总结
查看>>
工厂模式
查看>>
Java调优之jvm和线程的内存分析
查看>>
JavaScript DOM兼容性问题整理及部分解决方案
查看>>
jstl核心标签库和其他
查看>>
keepalived+haproxy构建高可用负载均衡集群
查看>>
在ipython里面调试java
查看>>
Java网络编程——5.URL和URI
查看>>
网页自适应
查看>>