noip 2009 道路游戏
/*10分钟的暴力 意料之中的5分..*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,m,p,g[maxn][maxn],w[maxn],ans;
void Dfs(int now,int v)
{
if(now>m){ans=max(ans,v);return;}
for(int i=;i<=n;i++)
for(int j=;j<=p;j++)
{
int vi=;
for(int k=i,r=;r<=j;r++,k++)
vi+=g[k%(n+)][r+now];
Dfs(now+j,v+vi-w[i]);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&g[i][j]);
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
for(int i=;i<=n;i++)
for(int j=;j<=p;j++)
{
int vi=;
for(int k=i,r=;r<=j;r++,k++)
vi+=g[k%(n+)][r];
Dfs(j,vi-w[i]);
}
printf("%d\n",ans);
return ;
}
/*
考场上写的未优化的dp O(n^4) 40分
f[i][j]表示第i分钟 在j位置的最大收益
转移的话 枚举上一次选机器人走了几步
同时可以算出上次的起点 也就有了上个状态到现在的收益
这是考场上写的dp 后来发现有点小问题就是算上次的起点比较麻烦
后来直接不存起点这个状态
f[i]表示第i分钟的最大收益
同样的我们枚举上一次规定机器人走了几步
与此同时我们枚举j 表示上次的起点是谁
这样是j+枚举的步数 巧妙的避开了比较复杂的处理
然后计算收益 实现转移
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,m,p,g[maxn][maxn],w[maxn],f[maxn];
int main()
{
//freopen("roadgame.in","r",stdin);
//freopen("roadgame.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&g[i][j]);
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
memset(f,,sizeof(f));f[]=;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
for(int k=;k<=p;k++)
{
if(i-k<)continue;int vi=;
for(int l=i-k+,r=j;l<=i;l++,r++)vi+=g[r][l],r%=n;
f[i]=max(f[i],f[i-k]-w[j]+vi);
}
printf("%d\n",f[m]);
return ;
}
/*
后来看别人博客上的优化 恍然大悟!
上面的tle的dp很明显慢在计算收益上
然而收益与时间有关系 又不能用差分预处理(后来想想好像也可以 但比较麻烦)
我们枚举k 表示上次选的走几步时 每次的一次相加的
这里可以优化掉他 直接维护总的
因为枚举k的顺序决定了这里j枚举这次得起点会比较简单
这样随着枚举k可以依次算出vi
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
using namespace std;
int n,m,p,g[maxn][maxn],w[maxn],f[maxn];
int main()
{
//freopen("roadgame.in","r",stdin);
//freopen("roadgame.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&g[i][j]);
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
memset(f,,sizeof(f));f[]=;
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)//这次的出发点
{
int r=j-,vi=;//vi 表示累计的收益
if(r==)r=n;vi+=g[r][i];
for(int k=;k<=p;k++)
{
if(i-k<)continue;
f[i]=max(f[i],f[i-k]-w[r]+vi);
if(r==)r=n;else r--;
vi+=g[r][i-k];//只需要O(1)计算
}
}
printf("%d\n",f[m]);
return ;
}
noip 2009 道路游戏的更多相关文章
- NOIP2009pj道路游戏[环形DP 转移优化 二维信息]
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- 洛谷 P1070 道路游戏 解题报告
P1070 道路游戏 题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有\(n\)个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依 ...
- 洛谷P1070 道路游戏
P1070 道路游戏 题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将 ...
- [luogu]P1070 道路游戏[DP]
[luogu]P1070 道路游戏 题目描述小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...
- 最优贸易 NOIP 2009 提高组 第三题
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- 道路游戏(洛谷 P1070)
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- NOIP 2009 潜伏者
P1071 潜伏者 题目描述 RR 国和 SS 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 SS 国的 RR 国间谍小 CC 终于摸清了 SS 国军用密码的编码规则: ...
- 洛谷 P1070 道路游戏 DP
P1070 道路游戏 题意: 有一个环,环上有n个工厂,每个工厂可以生产价格为x的零钱收割机器人,每个机器人在购买后可以沿着环最多走p条边,一秒走一条,每条边不同时间上出现的金币是不同的,问如何安排购 ...
- 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题
洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...
随机推荐
- javascript 常用array类型方法
concat:基于当前数组中的所有项创建一个新数据,会创建当前数组一个副本,然后将接受到的参数放到数组末尾,最后返回新数组.如果没有参数,则复制当前数组并返回副本. slice:基于当前数组中一个或多 ...
- Java学习----变量是什么
1.变量必须拥有的类型 2.变量必须拥有的名字 变量:具备名字和类型的可以存放类型匹配的数据的量 public class Student { public static void main(Stri ...
- C语言笔记(枚举)
关于枚举,在我以前写程序的时候,几乎是没有使用过的,只是偶尔会在一下别人写的驱动库中有看到过.今天看了朱老师的视频,准备将枚举相关的东西总结一下. 一.关于枚举,你需要知道 (1)在C语言中就是一些符 ...
- dict两种遍历方法
采用for...in...遍历: >>> for i in dd: ... print("%s:%s"%(i,dd[i])) ... :chen :hang :w ...
- IIS 内部运行机制及Asp.Net执行过程详解
一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...
- Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)
Node应用,使用formidable处理文件上传,本地测试没有问题,部署到服务器上之后上传大文件浏览器收到以下错误信息: Failed to load resource: the server re ...
- javascript book
我们很欣喜地看到,在设计模式领域,<JavaScript设计模式>(JavaScript Design Patterns)和<JavaScript编程模式>(JavaScrip ...
- BitmapFactory.decodeResource(res, id); 第一个参数跟第二个参数有什么关系?
BitmapFactory.decodeResource(res, id); res= getResources();activity的方法 id = R.drawable.x
- -_-#ueditor编辑器chrome浏览器下只能复制最后一行
被过滤掉了
- 铁通、长宽网络支付时“签名失败”问题分析及解决方案 [88222001]验证签名异常:FAIL[20131101100002-142]
原文地址:http://bbs.tenpay.com/forum.php?mod=viewthread&tid=13723&highlight=%CC%FA%CD%A8 如果你的是铁通 ...