FATE
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13618 Accepted Submission(s): 6442
1
是一個二維費用的完全揹包,把忍耐度以及最多可以殺怪的次數看作揹包的費用 然後因爲是完全揹包(怪無數個)所以正序
#include
#include
#include
#include
#include
using namespace std;
long long dp[105][105];
int main(){
int n,m,k,s;
while(cin>>n>>m>>k>>s){
int vol = m;
int val[105],weight[105];
for(int i=1;i<=k;i++){
cin>>val[i]>>weight[i];
}
int i,j,z;
memset(dp,0,sizeof(dp));
// for( i=1;i<=vol;i++){
// for( j=1;j<=k;j++){
// for( z=1;z<=s;z++){
// int cnt = 1;
// while(cnt*weight[j]<=i&&cnt<=z){
// dp[i][z]=max(dp[i][z],dp[i-weight[j]][z-cnt]+val[j]);
// cnt++;
// }
// }
// }
// if(dp[i][s]>=n)break;
// }
int flag=0,ans=-1;
for(i=1;i<=k;i++){
for(j=weight[i];j<=vol;j++){
for(z=1;z<=s;z++){
dp[j][z]=max(dp[j][z],dp[j-weight[i]][z-1]+val[i]);
}
}
}//二維費用揹包 多一維表示費用
for(int i=1;i<=m;i++){
if(dp[i][s]>=n){
ans=i;
break;
} //固定s 然後找到最先滿足條件的體力輸出
}
if(ans!=-1)
cout<