HDU OJ 2159 FATE [动态规划]

2015-01-24 09:24:41 · 作者: · 浏览: 4

思路:该题是一个 二为费用完全背包,要满足两个条件,忍耐度,杀怪数,求最大经验。输出达到 升级经验时剩余的最大忍耐度。
代码:
[cpp]?
#include?
#include?
struct hello?
{?
??? int x;?
??? int y;?
}yi[500];?
int ok[500][500]={0};?
int main()?
{?
??? int a,b,c,n,m,k,v1,v2;?
??? while(~scanf("%d%d%d%d",&n,&v1,&k,&v2))?
??? {?
??????? memset(ok,0,sizeof(ok));?
??????? for(a=0;a ??????????? scanf("%d%d",&yi[a].y,&yi[a].x);?
??????? for(a=0;a ??????? {?
??????????? for(b=yi[a].x;b<=v1;b++)?

??????????? {?
??????????????? for(c=1;c<=v2;c++)?
??????????????????? if(ok[b][c] ??????????????????????? ok[b][c]=ok[b-yi[a].x][c-1]+yi[a].y;?
??????????? }?
??????? }?? www.2cto.com
??????? int loop=0,sum;?
??????? for(a=0;a<=v1;a++)?
??????? {?
??????????? for(b=1;b<=v2;b++)?
??????????? {?
??????????????? if(ok[a][b]>=n)?
??????????????????? {loop=1;sum=a;break;}?
??????????? }?
??????????? if(loop) break;?
??????? }?
??????? if(loop)?
??????????? printf("%d\n",v1-sum);?
??????? else?
??????????? printf("-1\n");?
??? }?
}?

?作者:PIAOYI0208