沙漠之旅(二维dp)
来源:互联网 发布:金庸 武功排名 知乎 编辑:程序博客网 时间:2024/04/26 13:51
“小胖要穿越一片沙漠,小胖开着一辆大吉普,小胖的吉普油耗高,吉普能放四桶油。”
这就是人人会唱的沙漠之歌~~体现了小胖拔群的聪明才智。
小胖的问题是这样的:现在需要驾车穿越一片沙漠,总的行驶路程为L。小胖的吉普装满油能行驶X距离,同时其后备箱最多能放下四桶油。在起点有N种汽油,每种汽油都有无限桶,一桶能行驶距离Ai。现在小胖想知道:能不能恰好带四桶油,再加上出发前装满的油,使得恰好能行驶L距离。
Input
第一行一个正整数T(1 <= T <= 50),表示数据的组数。
接下来T组数据,每组数据的第一行是三个整数L(1 <= L <= 1000),X(1 <= X <= L),N(1 <= N <= 1000)。
接下来N行,每行一个正整数Ai(1 <= Ai <= 1000),表示第i种汽油一桶能行驶的距离。
Output
对于每组数据输出一行,若能输出“Yes”,否则输出“No”
Sample Input
120 9 223
Sample Output
Yes
AC代码:
#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3fint dp[1010][5];int T,L,X,N,a[1010];int main(){int i,j,k,t;while(cin>>T)while(T--){cin>>L>>X>>N;L-=X;for(i=0;i<N;i++)cin>>a[i];memset(dp,-INF,sizeof(dp));dp[0][0]=0;for(i=0;i<N;i++){for(j=a[i];j<=L;j++){for(k=1;k<5;k++){for(t=1;t<=k&&t*a[i]<=j;t++)dp[j][k]=max(dp[j][k],dp[j-a[i]*t][k-t]+t*a[i]);}}}if(dp[L][4]==L)cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;}
0 0
- 沙漠之旅(二维dp)
- bnu 沙漠之旅 (二维背包)
- B. 沙漠之旅(分组背包)
- BNU 沙漠之旅
- BNUOJ29376 沙漠之旅
- 沙漠之旅
- BNU 沙漠之旅
- 沙漠之旅 && 抽签
- BNUOJ--29376 沙漠之旅
- HihoCoder]#1375 : 沙漠之旅
- 第十一届北京师范大学程序设计竞赛(网络同步赛)+沙漠之旅
- 沙漠之路
- 《沙漠掘金》之随想
- hdu3669之二维斜率DP
- 背包dp之二维背包
- 二维dp 之 完美序列
- 一道背包问题 BunOJ 29376 沙漠之旅
- 宠物小精灵之收服(DP,二维背包问题)
- spring MVC异常捕获机制
- AOP简单介绍
- JS遍历对象或者数组
- Android 点击空白处自动隐藏输入法
- C# 复习笔记 消息与事件处理
- 沙漠之旅(二维dp)
- Android自定义View简介
- linux netstat 统计连接数查看外部
- linux入门(三)常见Linux指令及其用法
- jquery防止表单重复提交
- 蓝牙,WiFi(二)
- MVC4+EasyUI的Web经验总结 easyui-treegrid onBeforeLoad
- 哈希算法
- 团队开发管理-团队组织与管理