[dp][uestc oj]J - 男神的约会
J - 男神的约会
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
有一天男神约了学姐姐去看电影,电影院有一个活动,给你一个10*10的矩阵,每一个格子上都有一个0-9的整数,表示一共十种优惠券中的一种。
观众从左上角的格子开始走,走到右下角。每走到一个有着a号优惠券的格子,都必须要玩一个a分钟的游戏来领取这张优惠券。
每次只能向右或向下走。当走到右下角的时候,如果集齐10种优惠券就可以半价看电影呢。
为了能在学姐姐面前展示自己的才智,男神准备用最少的时间领取全部的优惠券(他要省出最多的时间陪学姐姐)。聪明的你能告诉男神,他最少要花费的时间是多少?
Input
输入包含10行,每行10个数字,以空格隔开,表示格子上的优惠券的种类。数据保证存在合法路径。
Output
输出男神走到右下角的最小时间花费。
Sample input and output
| Sample Input | Sample Output |
|---|---|
0 1 2 3 4 5 6 7 8 9 |
50 |
影响当前决策的有所在的位置和收集过的优惠劵因此定义状态dp[i][j][sta]为到i,j位置sta状态的最小花费,问题来了,sta怎么表示,比较好的办法是用一个二进制,一位对应一种优惠劵,0表示没有收集过,1表示收集过。状态转移方程dp[i][j][st|1<<mp[i][j]]=min(dp[i-1][j][st],dp[i][j-1][st]|(i-1,j)+mp[i][j],(i,j-1)合法,st相等),注意递推顺序应该是由左上角往右下斜着推,用一个队列来实现。
memset是按字节赋值的,so。int只有赋值-1和0才会对应-1和0
#include<cstdio>
#include<memory.h>
#include<queue>
#include<algorithm>
using namespace std; const int MAXSTA=0x3ff;
const int MAXij=;
//const int SIGN=16843009;//0x01010101
int dp[MAXij][MAXij][MAXSTA]; int mp[MAXij][MAXij];
bool vis[MAXij][MAXij][MAXSTA];
int solve()
{
queue<int>qi;
queue<int>qj;
queue<int>qst;
int ci=,cj=,cst=<<mp[][];
memset(dp,,sizeof(dp));
//memset(vis,0,sizeof(vis));
dp[ci][cj][cst]=mp[][]; int ni,nj,nst;
do
{
if(ci<){
ni=ci+,nj=cj;
nst=cst|(<<mp[ni][nj]);
dp[ni][nj][nst]=min(dp[ni][nj][nst],dp[ci][cj][cst]+mp[ni][nj]);
if(!vis[ni][nj][nst])
{
qi.push(ni);
qj.push(nj);
qst.push(nst);
vis[ni][nj][nst]=true;
}
}
if(cj<){
ni=ci,nj=cj+;
nst=cst|(<<mp[ni][nj]);
dp[ni][nj][nst]=min(dp[ni][nj][nst],dp[ci][cj][cst]+mp[ni][nj]);
if(!vis[ni][nj][nst])
{
qi.push(ni);
qj.push(nj);
qst.push(nst);
vis[ni][nj][nst]=true;
}
}
ci=qi.front();
cj=qj.front();
cst=qst.front();
qi.pop();
qj.pop();
qst.pop();
}while(qi.size());
} int main()
{
//freopen("Jinput.txt","r",stdin);
int i,j;
for(i=;i<;i++)
for(j=;j<;j++)
scanf("%d",&mp[i][j]); solve();
printf("%d",dp[][][MAXSTA]);
}
[dp][uestc oj]J - 男神的约会的更多相关文章
- UESTC 2015dp专题 j 男神的约会 bfs
男神的约会 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...
- [动态规划] uestc oj A - 男神的礼物
A - 男神的礼物 Time Limit: 3000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Lweb学长 ...
- UESTC_男神的约会 2015 UESTC Training for Dynamic Programming<Problem J>
J - 男神的约会 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- 男神的约会(状压dp)
有一天男神约了学姐姐去看电影,电影院有一个活动,给你一个10*10的矩阵,每一个格子上都有一个0-9的整数,表示一共十种优惠券中的一种. 观众从左上角的格子开始走,走到右下角.每走到一个有着a号优惠券 ...
- [dp]uestc oj 邱老师看电影
定义状态dp[w][b]表示有w只白老鼠,b只黑老鼠时妹子赢的概率,分两种情况妹子抓到白老鼠概率为w/(w+b)和否则只有妹子抓黑老鼠和邱老师抓黑老鼠妹子才可能赢,再分两种情况:酱神抓白老鼠,状态 ...
- cdoj 1134 男神的约会 状压dp
题目链接 给一个10*10的方格, 每个格子里面有0-9,走到一个格子, 就要在这个格子待一段时间, 时间长度为这个格子的数字. 从左上角走到右下角, 要求0-9必须每种格子都要走到, 输出最短时间. ...
- [dp][uestc oj][最长上升子序列] LIS N - 导弹拦截
N - 导弹拦截 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- [dp uestc oj] G - 邱老师玩游戏
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- [dp]uestc oj E - 菲波拉契数制
E - 菲波拉契数制 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
随机推荐
- 转载TCP-IP协议解释
本文转载自 http://www.ruanyifeng.com/blog/2009/03/tcp-ip_model.html TCP/IP模型是互联网的基础, 理解 TCP/IP对理解互联网至关重要 ...
- linux命令之curl,wget
curl由于可自定义各种请求参数所以在模拟web请求调试网页方面更擅长:wget由于支持ftp和Recursive所以在下载文件方面更擅长.类比的话curl是浏览器,而wget是迅雷9. 在下载上,也 ...
- UE4 Runtime下动态给Actor添加组件
http://www.v5xy.com/?p=858 UE4的组件分为两种:USceneComponent, UActorComponent UActorComponent (NewObject(th ...
- hdu1175 连连看
连连看 HDU - 1175 “连连看”相信很多人都玩过.没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子.如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子 ...
- 洛谷P3110 [USACO14DEC]驮运Piggy Back
P3110 [USACO14DEC]驮运Piggy Back 题目描述 贝西和她的妹妹艾尔斯白天在不同的地方吃草,而在晚上他们都想回到谷仓休息.聪明的牛仔,他们想出了一个计划,以尽量减少他们在步行时花 ...
- Linux 中 ip netns 命令
通过 ip netns help 可以查看所有关于ip netns的命令: network namespace 在逻辑上是网络堆栈的一个副本,它有自己的路由.防火墙规则和网络设备. ip netns ...
- Java 多线程高并发编程 笔记(二)
1. 单例模式(在内存之中永远只有一个对象) 1.1 多线程安全单例模式——不使用同步锁 public class Singleton { private static Singleton sin=n ...
- VLAN-7-VTP处理及修订版本号
在VTPv1和VTPv2中,更新的过程开始于:交换机管理员在一台VTP服务器交换机上添加.删除或更新VLAN.当新的配置出现时,VTP服务器将旧的VTP修订版本号加1,并通告完整的VLAN配置数据库以 ...
- [题解](gcd/欧拉函数)luogu_P2568_GCD
求gcd(x,y)=p等价于求gcd(x/p,y/p)=1,转化为了n/p内互质的个数 所以欧拉函数,因为有序所以乘2,再特判一下只有在1,1情况下才会重复计算,所以每次都减一 数组开小一时爽,提交w ...
- 一个VUE的小案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...