hdu_2159_FATE(完全背包)

题目连接:hdu_2159_FATE

题意:完全背包的题意

题解:把杀敌数看成背包的容量,维护一个经验的最大值,我是多开一维来记录最大的忍耐度,当然你也可以直接开一位,并记录忍耐度,最后扫一遍

 1 #include<cstdio>
 2 #include<cstring>
 3 #define F(i,a,b) for(int i=a;i<=b;i++)
 4 inline void up(int &x,int y){if(x<y)x=y;}
 5 
 6 int n,m,k,s,a[111],b[111],dp[111][111];
 7 
 8 int main(){
 9     while(~scanf("%d%d%d%d",&n,&m,&k,&s)){
10         memset(dp,0,sizeof(dp));
11         F(i,1,k)scanf("%d%d",a+i,b+i);
12         F(i,1,k)F(j,1,s)F(kc,0,m-b[i])
13         up(dp[j][kc],dp[j-1][kc+b[i]]+a[i]);
14         int ans=-1;
15         for(int i=m;i>=0;i--)if(dp[s][i]>=n){ans=i;break;}
16         printf("%d
",ans);
17     }
18     return 0;
19 }
View Code


原文地址:https://www.cnblogs.com/bin-gege/p/5696085.html