題目連接:hdu_2159_FATE
題意:完全揹包的題意
題解:把殺敵數看成揹包的容量,維護一個經驗的最大值,我是多開一維來記錄最大的忍耐度,當然你也可以直接開一位,並記錄忍耐度,最後掃一遍
#include<cstdio>
#include<cstring>
#define F(i,a,b) for(int i=a;i<=b;i++)
inline void up(int &x,int y){if(x<y)x=y;}
int n,m,k,s,a[111],b[111],dp[111][111];
int main(){
while(~scanf("%d%d%d%d",&n,&m,&k,&s)){
memset(dp,0,sizeof(dp));
F(i,1,k)scanf("%d%d",a+i,b+i);
F(i,1,k)F(j,1,s)F(kc,0,m-b[i])
up(dp[j][kc],dp[j-1][kc+b[i]]+a[i]);
int ans=-1;
for(int i=m;i>=0;i--)if(dp[s][i]>=n){ans=i;break;}
printf("%d\n",ans);
}
return 0;
}