/*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 道路游戏的更多相关文章

  1. NOIP2009pj道路游戏[环形DP 转移优化 二维信息]

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...

  2. 洛谷 P1070 道路游戏 解题报告

    P1070 道路游戏 题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有\(n\)个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依 ...

  3. 洛谷P1070 道路游戏

    P1070 道路游戏 题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将 ...

  4. [luogu]P1070 道路游戏[DP]

    [luogu]P1070 道路游戏 题目描述小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...

  5. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  6. 道路游戏(洛谷 P1070)

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...

  7. NOIP 2009 潜伏者

    P1071 潜伏者 题目描述 RR 国和 SS 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 SS 国的 RR 国间谍小 CC 终于摸清了 SS 国军用密码的编码规则: ...

  8. 洛谷 P1070 道路游戏 DP

    P1070 道路游戏 题意: 有一个环,环上有n个工厂,每个工厂可以生产价格为x的零钱收割机器人,每个机器人在购买后可以沿着环最多走p条边,一秒走一条,每条边不同时间上出现的金币是不同的,问如何安排购 ...

  9. 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题

    洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...

随机推荐

  1. UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)

    Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...

  2. SecureCRT上使用公钥登陆Linux服务器

    SecureCRT部分配置 1.首先生成公钥. 打开SecureCRT(我的版本为7.0,估计其他版本基本相同)程序,点击菜单栏的“工具”->“创建公钥”.按照步骤执行.其中一步比较重要就是选择 ...

  3. PHP搜索Solr文档(含高亮)

    <?php $options = array ( 'hostname' => 'localhost', 'port' => '8080', 'path' => 'solr/he ...

  4. ftp文件操作

    PHP FTP操作类( 上传.拷贝.移动.删除文件/创建目录 ) 2016-06-01 PHP编程 /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) */ class class_ ...

  5. js中的 window.location、document.location、document.URL 对像的区别(转载)

    原文:http://www.cr173.com/html/18417_1.html 当我们需要对html网页进行转向的时候或是读取当前网页的时候可以用到下面三个对像: window.location. ...

  6. 深入Java虚拟机读书笔记第三章安全

    为什么需要安全性 Java的安全模型是其多个重要结构特点之一,它使Java成为适于网络环境的技术.Java安全模型侧重于保护终端用户免受从网络下载的.来自不可靠来源的.恶意程序(以及善于程序中的bug ...

  7. (git fetch git push git pull)远程本地分支互相推送更新

    git push origin bug_huiyuan:mobile_attribution 把bug_huiyuan(本地分支) 推送到 远程mobile_attribution分支 git pus ...

  8. JS中 submit提交与Form表单里的onsubmit的调用问题?

    最近在开发中遇到了表单提交前验证的问题,用一个普通的button按钮代替submit按钮,在提交前触发这个button的onclick事件,在其事件中触发form的submit事件.问题出现了: &l ...

  9. 实验二:基于mykernel实现的时间片轮转调度

    原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...

  10. Zend Cache的学习和实例

    前一段时间,公司让我组织一下关于Zend Cache的培训. 培训的具体内容有: 前端core缓存 前端Output缓存 前端Function缓存 前端Class缓存 前端File缓存 前端Page缓 ...