背包问题之两个例题:Inflate & Building
来源:互联网 发布:淘宝假货凭证有哪些 编辑:程序博客网 时间:2024/05/22 03:58
Problem #1:Inflate
Description
设计一次竞赛使得选手最大可能的得分尽可能高。可供选择的题目共有N类(1 <= N<= 10,000),你可以从每一类题目中选出任意道题或不选组成一次竞赛。某一类题中的每一道题都需要相同的时间并能得到相同的分数。竞赛总时间不超过M分钟(1 <=M <= 10,000)。
Input Format
第一行两个整数M, N分别表示竞赛总时间与题目类数;第2到N+1行每行两个整数,分别表示这类题每一道的分数和所需时间。
Output Format
仅一行,即给定条件下最大可能的得分。
Sample Input
300 4100 60250 120120 10035 20
Sample Output
605
Source Program
#include <stdio.h>#include <string.h>#define MAXNUM 10002#define MAX(a,b) a>b?a:bint M;//竞赛总时间 int N;//竞赛题的类别数 int s[MAXNUM]; //题i的分数 int t[MAXNUM]; //题i所需的时间 int f[MAXNUM]; int main(){//freopen("test.in","r",stdin);scanf("%d%d",&M,&N);for (int i=1; i<=N; i++)scanf("%d%d",&s[i],&t[i]);memset(f, 0, sizeof(f));for (int i=1; i<=N; i++)for (int j=0; j<=M; j++)if (j<t[i]) f[j]=f[j];else f[j]=MAX(f[j], f[j-t[i]]+s[i]);printf("%d\n",f[M]);//fclose(stdin);return 0;}
Problem #2:Building
Description
WOW是BLIZZARD公司开发的一款网络游戏,游戏的背景是处在一个叫做艾泽拉斯的神秘大陆上的。在这片陆地上生活着许多不同种族不同部落的奇幻生物,暗夜精灵就是其中的一员。他们拥有高深的科技和强大的魔法,但却因为性格的冷傲孤僻而不被其他种族所接受。为了改善这种状况,半神塞纳留斯决定发展有暗夜精灵族特色的产业来吸引外族,他发现暗夜精灵的建筑风格深受世人青睐,因为它们都是古树的造型,且具有一种神奇的魔力,就是在占地面积不变的情况下可以自由改变形状,使得建筑之间完全没有空隙。
于是,他将这一艰巨的任务交给了部落中最具天赋的工程师守望者玛维,让他在一块面积为n(0<=n<=100)的土地上建造若干个建筑,这些建筑都有各自的占地面积q(0<=q<=100),价格p(0<=w<=100)和魅力值v(0<=v<=100)。就暗夜精灵当前掌握的科技来看,他们可以建造m(0<=m<=100)种建筑,为了不使游客感到乏味,每一种建筑规定最多只能建一座。
你的任务就是替玛维想出一种选择建造的方案,使得最多用k(0<=k<=100)的金钱,在面积为n的土地上建出的建筑具有最高的魅力值。
Input Format
第一行有三个数m,n,k;以下有m行,分别包含了m种建筑的占地面积q,价格p和魅力值v。
Output Format
仅有一个数,为最高魅力值。
Input Sample
5 12 114 3 33 2 62 4 26 3 75 5 6
Sample Output
15
Source Program
#include <stdio.h>#include <string.h>#define MAXNUM 101#define MAX(a,b) a>b?a:bint m;//建筑的种类数 int n; //土地的面积 int k;//使用的金钱数 int q[MAXNUM]; //建筑i的占地面积 int p[MAXNUM]; //建筑i的价格int v[MAXNUM];//建筑i的魅力值 int f[MAXNUM][MAXNUM]; //f表示前i个获得的最大魅力值 int main(){//freopen("building7.in","r",stdin);scanf("%d%d%d",&m,&n,&k);for (int i=1; i<=m; i++)scanf("%d%d%d",&q[i],&p[i],&v[i]);memset(f,0,sizeof(f)); for (int i=1; i<=m; i++)for (int j=n; j>=1; j--)for (int h=k; h>=1; h--)if (j<q[i]||h<p[i]) f[j][h]=f[j][h];else f[j][h]=MAX(f[j][h], f[j-q[i]][h-p[i]]+v[i]);printf("%d\n",f[n][k]);//fclose(stdin);return 0;}
- 背包问题之两个例题:Inflate & Building
- 01背包问题-采药例题
- 【水】背包问题的POJ例题
- 背包问题之01背包
- 背包问题之01背包
- 背包问题之01背包
- 三种背包问题的例题(各一道)
- 1 0 背包问题 典型的 例题 : Bone Collector
- 10背包例题
- 背包例题【dp练习】
- 背包问题之01背包、完全背包和多重背包
- 背包问题之01背包问题
- dp之背包问题
- 贪心之背包问题
- 背包问题之1
- 背包问题之2
- 背包问题之3
- 背包问题之4
- 空间家获2.58亿元A轮融资,O2O商办领域最高投资
- 《代码之髓》读书笔记之一:语言
- 是时候回归了
- KMP算法与传统串匹配算法(纯文字版)
- ns3--TapBridge, TapNetDevice,FdNetDevice等
- 背包问题之两个例题:Inflate & Building
- hihocoder 机会渺茫
- java可视化代码生成工具
- accept是又产生一个Socket端口吗?
- MySql Count查询满足多个行条件的唯一值个数
- html5+css+js实现动画特效,人物动画
- leetcode (14) - Longest Common Prefix
- Android应用程序包扫描过程源码分析
- React Native 之 安装