ZOJ 3623 Battle Ships

题意:n m(武器种类n,塔m血) 目标,计算推到塔最短时间

下面n行a b表示建该武器需要a秒,建成后每秒造成m血

 

果果的完全背包

 

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<queue>
#include<vector>
#include<string.h>
#include<algorithm>

#define N 40
#define M 400
using namespace std;
int a[N],b[N],dp[M];
inline int Max(int a,int b){return a>b?a:b;}
int main(){
	int n,m,i,j,k;
	while(~scanf("%d%d",&n,&m)){
		for(i=0;i<n;i++)scanf("%d%d",&a[i],&b[i]);
		int time=M;
		memset(dp,0,sizeof(dp));
			for(i=0;i<n;i++)
				for(j=0;j<time;j++)
				{
					dp[j+a[i]]=Max(dp[j+a[i]],dp[j]+j*b[i]);
				}
			for(i=0;i<M;i++)if(dp[i]>=m){time=i;break;}
			printf("%d\n",time);
	}
	return 0;
}

你可能感兴趣的:(ZOJ 3623 Battle Ships)