//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/9/25.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100+10;
int a[maxn],b[maxn],dp[maxn][maxn];
int n,t,q;
int main()
{
while(scanf("%d%d%d",&n,&t,&q))
{
if(n==0&&t==0&&q==0) break;
a[0]=0,b[0]=1;
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
memset(dp,0x7f,sizeof(dp));
dp[0][100]=100;
double r=100.0/q;
int round=0;
if(r==100/q) round=r;
else round=r+1;
int ans=0;
for(int i=1;i<=round;i++)
{
for(int j=0;j<=n;j++)
{
for(int k=100;k>=a[j];k--)
{
int temp=min(100,k-a[j]+t);
dp[i][temp]=min(dp[i][temp],dp[i-1][k]-b[j]);
if(dp[i][temp]<=0) {ans=i;break;}
}
if(ans) break;
}
if(ans) break;
}
if(ans) printf("%d\n",ans);
else printf("My god\n");
}
return 0;
}
HDU 3008 Warcraft(dp)
最新推荐文章于 2018-04-25 02:08:35 发布