浙江工商大学15年校赛E题 无邪的飞行棋 【经典背包】
无邪的飞行棋
Time Limit
1s
Memory Limit
64KB
Judge Program
Standard
Ratio(Solve/Submit)
15.38%(4/26)
Description:
大家还记得小时候玩过的飞行棋游戏吧,和小伙伴们一起体验飞行的乐趣!随着岁月的流逝我们换个方法重温这个游戏。 开始我们都在起点0,我们的目标是到达目的地M(0 < M < 1000)。现在我们手中有N(0 < N < 100)种点数,每种点数的大小为K(0 < k < 23),这种点数的个数为C(0 < C < 100)个。我们使用一个大小为K的点数,我们就能前进K步。现在想知道,我们通过使用这些点数,能否到达目的地,如果不能输出“Naivete”,如果能到达目的地,输出我们到达目的地使用的点数最少的个数!注意我们没到达一步都要在0~M的范围内(如果你现在在M-2这个地方,如果使用8点,前进8步,超过M,是不允许的) Input:
输入有多组数据,每组数据: 第一行输入M,N。接写来的N行输入K,C; 输入以EOF结束 Output:
如果不能到达输出“Naivete”,如果能到达,输出我们能使用的点数的最少个数! Sample Input:
11 4
3 3
1 11
5 2
6 3 22 3
2 4
1 7
3 2
Sample Output:
2
Naivete
这是一道一眼就可以看出来的经典背包问题,只是原来的背包问题是求最大价值
在这道题目里是求使用点数的最少个数,原理是一样的
01背包问题:一个背包总容量为V,现在有N个物品,第i个 物品体积为weight[i],价值为value[i],现在往背包里面装东西,怎么装能使背包的内物品价值最大? 动态规划先找出子问题,我们可以这样考虑:在物品比较少,背包容量比较小时怎么解决? 用一个数组f[i][j]表示,在只有i个物品,容量为j的情况下背包问题的最优解, 那么当物品种类变大为i+1时,最优解是什么?第i+1个物品可以选择放进背包或者不放进背包(这也就是0和1), 假设放进背包(前提是放得下) 那么f[i+1][j]=f[i][j-weight[i+1]+value[i+1];如果不放进背包,那么f[i+1][j]=f[i][j]。 这就得出了状态转移方程: f[i+1][j]=max(f[i][j],f[i][j-weight[i+1]+value[i+1])。
内存优化,把二维背包降成一维,然后从后往前推即可
Conference: http://blog.csdn.net/kangroger/article/details/38864689
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cmath>
#include <stack>
#include <string>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <vector>
#include <algorithm>
#define Max(a,b) (((a) > (b)) ? (a) : (b))
#define Min(a,b) (((a) < (b)) ? (a) : (b))
#define Abs(x) (((x) > 0) ? (x) : (-(x)))
#define MOD 1000000007
#define pi acos(-1.0) using namespace std; typedef long long ll ;
typedef unsigned long long ull ;
typedef unsigned int uint ;
typedef unsigned char uchar ; template<class T> inline void checkmin(T &a,T b){if(a>b) a=b;}
template<class T> inline void checkmax(T &a,T b){if(a<b) a=b;} const double eps = 1e- ;
const int N = ;
const int M = * ;
const ll P = 10000000097ll ;
const int MAXN = ;
const int INF = 0x3f3f3f3f ;
const int offset = ; int dp[];
int n, m, cur; int main() {
std::ios::sync_with_stdio(false);
int i, j, t, k, u, c, v, p, numCase = ; while (cin >> m >> n) {
memset (dp, 0x3f, sizeof(dp));
dp[] = ;
for (i = ; i < n ; ++i) {
cin >> c >> k;
for (j = ; j < k; ++j) {
for (cur = m; cur >= ; --cur) {
if (cur - c >= ) {
if (dp[cur - c] != INF) {
checkmin (dp[cur], dp[cur - c] + );
}
}
}
}
}
if (dp[m] == INF) {
printf("Naivete\n");
} else {
printf("%d\n",dp[m]);
}
} return ;
}
浙江工商大学15年校赛E题 无邪的飞行棋 【经典背包】的更多相关文章
- 浙江工商大学15年校赛I题 Inversion 【归并排序求逆序对】
Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20 ...
- 浙江工商大学15年校赛C题 我删我删,删删删 【简单模拟】
Description: 有一个大整数.不超过1000位.假设有N位.我想删掉其中的任意S个数字.使得删除S位后,剩下位组成的数是最小的. Input: 有多组数据数据,每组数据为两行.第一行是一个大 ...
- 浙江大学2015年校赛F题 ZOJ 3865 Superbot BFS 搜索
不知道为什么比赛的时候一直想着用DFS 来写 一直想剪枝结果还是TLE = = 这题数据量不大,又是问最优解,那么一般来说是用 BFS 来写 int commandi[4] = {1, 2, 3, 4 ...
- 哈尔滨工程大学ACM预热赛 补题
链接:https://ac.nowcoder.com/acm/contest/554/A来源:牛客网 小虎刚刚上了幼儿园,老师让他做一个家庭作业:首先画3个格子,第二行有2个格子,第三行有1个格子. ...
- 浙江大学2015年校赛B题 ZOJ 3861 Valid Pattern Lock
这道题目是队友写的,貌似是用暴力枚举出来. 题意:给出一组数,要求这组数在解锁的界面可能的滑动序列. 思路:按照是否能够直接到达建图,如1可以直接到2,但是1不能直接到3,因为中间必须经过一个2. 要 ...
- 哈尔滨工程大学ACM预热赛 G题 A hard problem(数位dp)
链接:https://ac.nowcoder.com/acm/contest/554/G Now we have a function f(x): int f ( int x ) { if ( ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)
配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...
- 第十届蓝桥杯JavaB组省赛真题
试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...
随机推荐
- codeforces 622C. Optimal Number Permutation 构造
题目链接 假设始终可以找到一种状态使得值为0, 那么两个1之间需要隔n-2个数, 两个2之间需要隔n-3个数, 两个3之间隔n-4个数. 我们发现两个三可以放到两个1之间, 同理两个5放到两个3之间. ...
- Python keyword 模块 -- 学习笔记
keyword 的帮助文档 >>> import keyword >>> help(keyword) Help on module keyword: NAME ke ...
- [LeetCode]题解(python):068-Text Justification
题目来源: https://leetcode.com/problems/text-justification/ 题意分析: 输入一个字符串数组和一个规定长度L.将这个字符串数组的元素尽可能放到长度的L ...
- Select specified items from Tuple List
#Select specified items from Tuple List ##Select one item to form list `tupleList.Select(element =&g ...
- USB3.0 和usb 2.0的区别
USB3.0拥有10倍于USB2.0的速度,可惜DIY“江湖”险恶,如果咱们不掌握如何识别USB3.0的方法,很容易被JS忽悠.何况,USB3.0主板不等于USB3.0机箱,很多朋友在选购时都忽略了一 ...
- 配置管理多个ssh key
假设需要为两台主机建立ssh key以便抓取.更新代码,主机A:111.111.111.111,主机B:222.222.222.222. 首先,用两个账户(hostA@email.com与hostB@ ...
- Objective-c 数据类型
这里列出Objective-c中独有数据类型: 一.字符串 在Objective-c中,字符串常量是由@和一对从引号括起的字符串序列.比如:@"China".@"obje ...
- 使用autoCompleteTextView以及MultiAutoCompleteTextView实现自动匹配输入内容
一:autoCompleteTextView 1:控件属性设置: 注意添加:android:completionThreshold="1"来设置输入几个字符的时候开始显示匹配的内容 ...
- 杭电ACM 2052 Picture
Picture Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- BZOJ 1572: [Usaco2009 Open]工作安排Job( 贪心 )
贪心... 按截止时间排序 , 然后从小到大考虑 . 假设当前考虑第 i 个任务 , 若目前已选工作数 < D_i , 那就选 i ; 否则 若已选工作中利润最小的比 P_i 小 , 那就去除它 ...