Link:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4769
完全背包
反向考虑造船和进攻的关系,枚举时间。
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
typedef long long ll;
const int Len=40;
const int N=400;
int map[Len][2];
int dp[N+50];
int main(){
int n,l;
while(cin>>n>>l){
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
cin>>map[i][0]>>map[i][1];
}
for(int i=0;i<n;i++){
for(int j=0;j<N;j++){
dp[j+map[i][0]]=max(dp[j+map[i][0]],dp[j]+map[i][1]*j);
}
}
for(int i=0;i<N;i++){
if(dp[i]>=l){
cout<<i<<endl;
break;
}
}
}
}