/*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. Configuration ReportNG with TestNG

    下载 Reporter.jar,velocity-dep-1.4.jar 和 Guice.jar: 配置项目属性:Properties ->TestNG ->Disable Default ...

  2. Linux(Debian)上安装Redis教程

    -- 第一步下载文件到该目录 cd /usr/local/src wget http:.tar.gz 解压 tar xzf redis.tar.gz -- 第二步编译安装 make make all ...

  3. php图片上传

    //处理图片 private function imageDeal($param){ $arrType=array('image/jpg','image/bmp','image/png','image ...

  4. [Python笔记]第二篇:运算符、基本数据类型

    本篇主要内容有:运算符 基本数据类型等 一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 6.身份运算 7.位运算 8.运算符优先级 二.基本数据类型 1.整数:int ...

  5. CAFFE安装 CentOS无GPU

    前记 由于是在一台用了很久的机器上安装caffe,过程比较复杂,网上说再干净的机器上装比较简单.如果能有干净的机器,就不用再过这么多坑了,希望大家好运!介绍这里就不说了,直接进入正题: Caffe 主 ...

  6. POJ1505 Copying Books(二分法)

    B - 二分 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Description   Be ...

  7. listen函数

    listen函数仅仅由TCP服务器调用,它做2件事: 1)当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字 listen函数把一 ...

  8. JS之路——日期函数

    时间对象是一个我们经常要用到的对象,无论是做时间输出.时间判断等操作时都与这个对象离不开.除开JavaScript中的时间对象外,在VbScript中也有许多的时间对象,而且非常好用.下面还是按照我们 ...

  9. "类名.this"与"this"的区别

    "this"是指(或者说:所代表的是)当前这段代码所在的类的对象.而"类名.this"是指"类名"的对象(一般在匿名类或内部类中使用来调用外 ...

  10. 【HDOJ】1310 Team Rankings

    STL的应用,基本就是模拟题. /* 1410 */ #include <iostream> #include <string> #include <algorithm& ...