码迷,mamicode.com
首页 > 其他好文 > 详细

魔兽争霸是

时间:2014-08-31 20:00:31      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:des   blog   io   strong   for   数据   div   问题   代码   

 

Description
魔兽争霸是游侠UFO最喜欢玩的游戏之一,某天下午游侠UFO在网上和某人厮杀,战争进入了胶着状态,如何把手上的资源有效地转化成战斗力成了困扰游侠UFO的一个问题。现在游侠UFO手上有一大笔钱V,而他所选的Undead族有N个兵种,是造一大堆食尸鬼还是一群冰龙呢?这是你需要帮助游侠UFO解决的问题。我们知道,每个兵种都有不同的造价和作战能力,假设第i个兵种造价为v[i],作战能力为w[i]。显然为了能得到更高的获胜概率,我们需要在有限的资源下获得更多的作战能力,你的任务就是编程帮游侠UFO计算他现在的资源所能得到的最大的作战能力。(为了简化问题,再此我们假设每个兵种都可以无限制的制造,没有人口限制。)
Input
输入包含多组测试数据,每组数据的第一行包含两个整数N(0<=N<=100)、V(0<=V<=2000);接下来的N行中每一行包含两个整数,分别表示该兵种的造价v[i]和作战能力w[i]。
Output
每组输出只占一行,包含一个整数,表示能产生的最大作战能力。

Sample Input

4 3
1 3
2 4
3 5
4 6

4 3
1 2
2 5
3 6
4 7

Sample Output

9
7

解析:
这是道多重背包的问题,因此用多重背包的经典代码即可解决,见如下代码:

# include<stdio.h>
# include<string.h>
struct node
{
int v;
int w;
}g[105];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int nCase,nVal;
int i,j;
int dp[2005];
while((scanf("%d %d",&nCase,&nVal))!=EOF)
{
for(i=0;i<nCase;i++)
scanf("%d %d",&g[i].v,&g[i].w);
memset(dp,0,sizeof(dp));
for(i=0;i<nCase;i++) //多重背包的经典代码
for(j=g[i].v;j<=nVal;j++)
dp[j]=Max(dp[j-g[i].v]+g[i].w,dp[j]);
printf("%d\n",dp[nVal]);
}
return 0;
}

魔兽争霸是

标签:des   blog   io   strong   for   数据   div   问题   代码   

原文地址:http://www.cnblogs.com/chenyouyou/p/3948032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!