HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包) 题意分析 与普通的完全背包大同小异,区别就在于多了一个个数限制,那么在普通的完全背包的基础上,增加一维,表示个数.同时for循环多写一层即可. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 105 using namespace std; int dp[…
题目链接 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度.当忍耐度降到0或者0以下时,xhd就不会玩这游戏.xhd还说了他最多只杀s只怪.请问他能升掉这最后一级吗? Input 输入数据有多组,对于每组数据第一行输入n,m,…
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数.因此用0表示不可以,1表示可以.最后对dp数组扫描一遍即可. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 100…
HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那么肯定不能被平分.若为偶数,则对valuesum/2为背包容量,全体石头为商品做完全背包.把完全背包进行二进制优化后,转为01背包即可. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #inclu…
HDOJ(HDU).1114 Piggy-Bank (DP 完全背包) 题意分析 裸的完全背包 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 100000 #define INF 0x3f3f3f3f using namespace std; int we[nmax],va[nmax],dp[nmax]; stru…
FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11908    Accepted Submission(s): 5645 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2159 FATE Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) 问题描述 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还…
FATE Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 40   Accepted Submission(s) : 26 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd…
FATE Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度.…
题目: ​ 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下获得的最大的经验值. 刚看到这个题一直把思维限制在一维dp中,总是不能表达全部的条件,然后想到二维dp.因为目的是升级,所以dp表示的就要是最大的经验,下标自然就是剩下的条件忍耐度和杀怪的个数了.理清了这些,却死在设计程序上,,,,,,,,,终归是dp做的太少了. 代码: #include <ios…
题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i-a[j].toler][h-1]+a[j].exper) ; #include <stdio.h> #include <string.h> #include <iostream> using namespace std ; struct node { int exper…
题意: 小余玩游戏,离最后一级还需n的经验值,但是他已经很厌烦了,还剩下m的忍耐度.每杀一只怪小余会得到相应的经验,同时减掉相应的忍耐度. 当忍耐度降到0或者0以下时,小余就不会再玩这个游戏.小余还说他最多杀s只怪. 求小余升完最后一级能保留的最大忍耐度.如果无法升完最后一级则输出-1. 输入: n, m, k, s 分别表示:还需要的经验值.保留的忍耐度.怪的种数.最多的杀怪数 接下来k行每行两个数a,b.分别表示杀一只当前各类的怪会得到的经验值和会减掉的忍耐度.(每种怪都有无数个) 思路:…
FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度.当忍耐度降到0或者0以下时,xhd就不会玩这游戏.xhd还说了他最多只杀…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 解题报告:这题实际上是一个二维的背包问题,也可以由01背包扩展而来,01背包用一维数组,可想而知二维背包应该二维数组,然后每一维表示它的一种不同的需要付出的代价,普通的二维背包的递推公式是dp[j][k] = max(dp[j][k],w[j-v[i][k-n[i]] + w[i]);,要注意的是这是一般的二维背包的递推公式,但是在这题中有一点小小的变化,就是 怪的个数有无限个,也就是说每件物…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:二维完全背包,状态转移方程为: f[j][l]=max(f[j][l],f[j-b[i]][l-1]+w[i]); a[i]表示杀死第i个怪所得的经验值,b[i]表示消耗的忍耐度 #include<stdlib.h> #include<time.h> #include <cstdio> #include <cstring> #include <…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值. 状态转移方程为: dp[j][k] = max(dp[j][k],dp[j-b[i]][k-1]+a[i]); 保存下当获得经验值可以升级时,维护下最小的耐久消耗 实现代码: #include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; ][…
FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7307    Accepted Submission(s): 3371 Problem Description 近期xhd正在玩一款叫做FATE的游戏,为了得到极品装备.xhd在不停的杀怪做任务.久而久之xhd開始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级. 如今的…
 FATE Problem Description 近期xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd開始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.如今的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到对应的经验,并减掉对应的忍耐度.当忍耐度降到0或者0下面时,xhd就不会玩这游戏. xhd还说了他最多仅仅杀s仅仅怪.请问他能升掉这最后一级吗?   Input 输入数据有多组,对于每组数据第…
Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度.当忍耐度降到0或者0以下时,xhd就不会玩这游戏.xhd还说了他最多只杀s只怪.请问他能升掉这最后一级吗?   Input 输入数据有多组,对于每组数据第一行输入n,m,k,s…
题意:xhd玩游戏,还需要n个经验值升级,还留有m的忍耐度,但是他最多打s只怪,给出k个怪的经验值a[i],以及消耗的忍耐度b[i],问xhd能不能升级-- 因为有两个限定,忍耐度,和最多打s只怪(即没打一只怪,要消耗1),又因为每只怪有无数只,所以是二维的完全背包-- 后来写了发现不对(过了样例一直WA)--又翻了题解发现是循环跳出没有弄对,要dp[i][j]>=n的同时且j==s(因为要刚好打s只怪--) 发现把每只怪的数量当1也能过(自己就是这样想的---55555) 每只怪只有一只水过版…
DP+贪心优化. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXNUM 105 typedef struct { int exp, deg; } info_st; info_st infos[MAXNUM]; int dp[MAXNUM][MAXNUM]; int n, m, k, s; int comp(const void *a, const void *b) { info…
Problem Description 反素数就是满足对于任意i(0< i < x),都有g(i) < g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大. Input 第一行输入n,接下来n行测试数据 输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b]. Output 输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数. Sample Input 3 2 3…
中文题目就不用解释了   就是裸的二维全然背包 d[i][j]表示消耗i忍耐杀j个怪最多可获得的经验  然后就用全然背包来做了  二维背包背包只是是多了一重循环 <span style="font-family:Arial Black;">#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 105; int ma…
题意:中文题. 析:dp[i][j] 已经杀了 i 个怪兽,已经用了 j 体积,所能获得的最大经验值,这个和一维的差不多,只是加一维而已. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iost…
作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢http://blog.csdn.net/eagle_or_snail/article/details/50987044,这里有大部分比较有趣的dp练手题. hud 2602 01背包板子题 #include<cstdio> #include<iostream> #include<cs…
HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的价格,重量和袋数. 每种大米的数量是有限的,应该能看出是多重背包的问题.关键是多重背包的处理方法.对多重背包采用二进制优化的方法.设同种大米的数量为n,每袋的价格为v,那么把同一种大米分别拆成1,2,4,8,16--(直到不够2^n时,剩下的单独分成一组),拆分的价格也分别对应是v,2v,4v,8v…
HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包) 题意分析 裸完全背包 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 100005 #define nn 105 using namespace std; int dp[nmax]; struct item{ int hap; int kal…
HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 33000 #define ll long long using namespace std; ll dp[nmax]; int coin[3]={1,2,3}; int mai…
HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nmax 505 #define nn 505*100 using namespace std;…
HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为这时候还剩下5块钱,直接买最贵的那个菜,就可以保证剩下来的钱数是最小的. 代码总览 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define nma…