SSL_2293--暗黑游戏(动规练习题)
2017-12-12 17:50
274 查看
题目描述
暗黑游戏中,装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备,每件有不同的价格(Pg和Rune)、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家,当然希望使用尽可能少的Pg和Rune购买更优的装备,以获得最高的能力值。请你帮忙计算出现有支付能力下的最大可以获得的能力值。输入格式
第一行,三个整数N,P,R,分别代表市场中物品种类,Pg的支付能力和Rune的支付能力。
第2..N+1行,每行四个整数,前两个整数分别为购买此物品需要花费的Pg,Rune,第三个整数若为0,则说明此物品可以购买无数件,若为其他数字,则为此物品可购买的最多件数(S),第四个整数为该装备的能力值。
输出格式
仅一行,一个整数,最大可获得的能力值。
样例输入
3 10 10
5 3 0 110
4 3 4 120
2 3 1 130
样例输出
370
思路
本题可以理解为二维费用+混合背包问题,可以将Pg的支付能力理解为重量,将Rune理解为体积就可以了。代码(C++)
#include<cstdio> #include<cstring> #define sr c=getchar() #define input read() #define pd (c<'0'||c>'9') #define fk f=f*10+c-48 #define ps if (c=='-') d=-1 using namespace std; int f[101][101];int v,u,k; int a[10001],c[10001],b[10001],s[10001]; int max(int x,int y) { return x>y?x:y; } int read()//输入快速流 { char c;int d=1,f=0; while (sr,pd) ps; fk; while (sr,!pd) fk; return d*f; } void write(int x)//输出快速流 { if (!x) return; write(x/10); putchar(x%10+48); } int main() { f[0][0]=0; k=input;v=input;u=input; for (int i=1;i<=k;i++) { a[i]=input;//重量 b[i]=input;//体积 s[i]=input;//数量 c[i]=input;//价值 } for (int i=1;i<=k;i++) if (!s[i])//如果是0则是无穷背包 for (int j=0;j<=v;j++) for (int l=0;l<=u;l++) { int t1=j+a[i],t2=l+b[i]; if (t1>v) continue; if (t2>u) continue; if (f[t1][t2]<f[j][l]+c[i]) f[t1][t2]=f[j][l]+c[i]; } else for (int o=1;o<=s[i];o++)//多重背包,也可以二进制优化,这里用的是朴素算法 for (int j=v;j>=0;j--) for (int l=u;l>=0;l--) { int t1=j+a[i],t2=l+b[i]; if (t1>v) continue; if (t2>u) continue; if (f[t1][t2]<f[j][l]+c[i]) f[t1][t2]=f[j][l]+c[i]; } write(f[v][u]); }
相关文章推荐
- (ssl 2293)暗黑游戏
- ssl2293-暗黑游戏【dp练习题】
- SSL_1597石子合并问题(动规练习题)
- SSL_1007&1595 乘积最大与和最大问题(区间动规练习题)
- SSL_1463--公共子串(动规练习题)
- SSL_2292竞赛得分C++(动规练习题)
- SSL_1203 书的复制(动规练习题)
- SSL_2295 暗黑破坏神(动规练习题)
- Game 迷城的国度 Next(类似暗黑的游戏)
- 前《暗黑》开发成员:成立新公司 开发新游戏
- 暗黑3补钉2.4前瞻:套装与物品更新-暗黑损坏神3专区-新浪游戏
- SSL2705 2017年8月17日提高组T1 游戏(math+二分)
- SSL_2340 格子游戏
- TA游戏推荐:暗黑神作 《万神之怒EX》
- SSL 2293——暗黑游戏
- Game 迷城的国度 Next(类似暗黑的游戏)
- 【动规】多边形游戏
- 一个你所不知道的暗黑游戏圈
- 科技庄园(动规练习题)
- [华为机试练习题]25.圆桌游戏