code1068 乌龟棋
暴力显然不行,所以考虑dp
记f[i][j][k][l]为使用i张1,j张2,k张3,l张4所得到的最大分数。
对于每个f[i][j][k][l],都可以由i-1张1,j张2,k张3,l张4所得到,
或者i张1,j-1张2,k张3,l张4所得到,
或者i张1,j张2,k-1张3,l张4所得到,
i张1,j张2,k张3,l-1张4所得到 的最大分数,
四者取max。
当然,还需加上它当前位置的分数。
当前位置为a[i+j*2+k*3+l*4+1](初始位置是1)
代码如下:
#include<iostream>
#include<cstring>
using namespace std; int f[][][][];
int s[];
int n,m; int main(){
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>s[i];
} int a,b,c,d;
a=b=c=d=;
int x;
for(int i=;i<=m;i++){
cin>>x;
switch(x){
case :a++;break;
case :b++;break;
case :c++;break;
case :d++;break;
}
} for(int i=;i<=a;i++){
for(int j=;j<=b;j++){
for(int k=;k<=c;k++){
for(int l=;l<=d;l++){
int& ans=f[i][j][k][l];
if(i>)ans=max(ans,f[i-][j][k][l]);
if(j>)ans=max(ans,f[i][j-][k][l]);
if(k>)ans=max(ans,f[i][j][k-][l]);
if(l>)ans=max(ans,f[i][j][k][l-]);
ans+=s[i+j*+k*+l*+];
}
}
}
} cout<<f[a][b][c][d]; return ;
}
在编写这个程序的过程中犯了一点小错误,在循环开始前把f[0][0][0][0]=s[1]
自认为考虑非常周到,把边界写上了,其实不用
在循环i=j=k=l=0的时候4个if都不进,最后ans+=s[i+j*2+k*3+l*4+1]其实已经把s[1]的值赋值给f[0][0][0][0]了,前面再画蛇添足就是错误的。
看来边界问题是一个非常有趣(坑)的问题啊...
code1068 乌龟棋的更多相关文章
- NOIP2010提高组乌龟棋 -SilverN
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- NOIP2010乌龟棋[DP 多维状态]
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- [NOIP2010] 提高组 洛谷P1541 乌龟棋
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 【NOIP2010】【P1317】乌龟棋
似乎很像搜索的DP(应该也可以用搜索写) 原题: 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物.乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N 格是终点, ...
- NOIP2010 乌龟棋
2乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌 ...
- 洛谷 P1541 乌龟棋
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- codevs 1068 乌龟棋
题目描述 Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制 ...
- 【noip 2009】 乌龟棋 记忆化搜索&动规
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
随机推荐
- linux性能监控——CPU、Memory、IO、Network
一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上 ...
- 全排列函数C++实现
例题:求由123456789构成的所有九位数字 1 用C++的next_permutation函数 #include <iostream> #include <stdio.h> ...
- HDOJ4763(KMP原理理解)
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 20165226 2017-2018-4 《Java程序设计》第8周学习总结
20165226 2017-2018-4 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章 创建线程的方式有三种,分别是: - 继承Thread类创建线程,程序中如果想要获取 ...
- 1102 Invert a Binary Tree
题意:给定一个二叉树,要求输出翻转后的二叉树的层序序列和中序序列. 思路:不用真的翻转,只需要在输出时先访问右结点再访问左结点即可. 代码: #include <cstdio> #incl ...
- C++ cosnt的一点总结
1,C++在定义函数重载的时候形参不管是不是const的他们都是等价的,除非形参是const引用.举个例子: void fun(int a){...}与void fun(const int a){.. ...
- Oracle关于date类型数据的总结
往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ...
- 【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
题目 传送门:QWQ 分析 看起来就是一个支持link的东西. 但有环,考虑缩点...... 但疯狂Tle.大概是常数卡不过去. 行走的大常数noble_ 代码 #include <bits/s ...
- ubuntu下安装和配置最新版JDK8傻瓜教程
ubuntu下安装和配置最新版JDK8傻瓜教程 听语音 | 浏览:18940 | 更新:2014-07-14 22:13 | 标签:ubuntu 1 2 3 4 5 6 分步阅读 ubuntu系统通常 ...
- eclipse项目推送git
引用:http://blog.csdn.net/zongzhankui/article/details/48653731