现在的位置: 首页 > 综合 > 正文

HDU 2159 FATE(二维背包)

2017年12月13日 ⁄ 综合 ⁄ 共 619字 ⁄ 字号 评论关闭
思路:典型的二维背包题,第一次做,所以贴个代码

#include <stdio.h>
#include <string.h>
#define M 105

int  f[M][M],a[M],b[M];
int n,m,k,s;
int max (int a ,int b)
{
    return a
> b ? a : b;
}
int  dp ()
{
    for (int rm
= 1; rm <= m; rm ++)
       
for (int sm = 1; sm <= s; sm ++)
       
{
           
for (int i = 1; i <= k; i ++)
               
if (rm >= b[i])
                   
f[rm][sm] = max (f[rm][sm],f[rm-b[i]][sm-1] + a[i]);
           
if (f[rm][sm] >=
n)    
//经验值大于所要求的,返回退出
               
return m - rm;
       
}
    return
-1;
}
int main ()
{

    while
(~scanf("%d%d%d%d",&n,&m,&k,&s))

    {
       
memset (f,0,sizeof(f));
       
for (int i = 1; i <= k; i ++)
           
scanf ("%d%d",&a[i],&b[i]);
       
printf ("%d\n",dp());
    }
    return
0;
}

抱歉!评论已关闭.