您的位置:首页 > 其它

(ssl 2293)暗黑游戏

2017-12-16 09:56 141 查看
Description暗黑游戏中,装备直接决定玩家人物的能力。可以使用Pg和Rune购买需要的物品。暗黑市场中的装备,每件有不同的价格(Pg和Rune)、能力值、最大可购买件数。Kid作为暗黑战网的一个玩家,当然希望使用尽可能少的Pg和Rune购买更优的装备,以获得最高的能力值。请你帮忙计算出现有支付能力下的最大可以获得的能力值。
分析:Pg和Rune说明要支付两种费用(二维费用背包)。
#include <cstdio>
using namespace std;
int n,sp,sr,p[151],r[151],s[151],m[151],f[101][101];
int main(){
scanf("%d%d%d",&n,&sp,&sr);
for (int i=1;i<=n;i++) scanf("%d%d%d%d",&p[i],&r[i],&s[i],&m[i]);
for (int i=1;i<=n;i++)

if (s[i]) //多重背包

for (int y=1;y<=s[i];y++) //数量
for (int j=sp;j>=0;j--)   //01背包
for (int k=sr;k>=0;k--){  //01背包
int t1=j+p[i]; int t2=k+r[i];
if (t1>sp) continue; //不够钱重新枚举
if (t2>sr) continue; //the same
if (f[t1][t2]<f[j][k]+m[i]) f[t1][t2]=f[j][k]+m[i]; //求最大值
}
else for (int j=0;j<=sp;j++)  //完全背包
for (int k=0;k<=sr;k++){ //完全背包
int t1=j+p[i]; int t2=k+r[i];
if (t1>sp) continue; //the same
if (t2>sr) continue; // the same
if (f[t1][t2]<f[j][k]+m[i]) f[t1][t2]=f[j][k]+m[i]; //求最大值
}
printf("%d",f[sp][sr]); return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: