您的位置:首页 > 其它

hdu 6082 2017百度之星资格赛

2017-08-07 17:27 323 查看
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
long long  n,m;
long long a[200005],b[200005];
long long k[20050],p[20050];
long long d[5005][21];

void dp()
{
memset(d,0x7f,sizeof(d));
for(int i=0;i<=10;i++) d[0][i]=0;
for(int s=0;s<=10;s++)
{
for(int i=1;i<=2001;i++)
{
for(int j=0;j<m;j++)
{
if(p[j]<=s)continue;//no damage
if(i-(p[j]-s)<0)
d[i][s]=min(d[i][s],k[j]);
else
d[i][s]=min(d[i][s],d[i-p[j]+s][s]+k[j]);
}
}
}

}
int  main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%lld %lld",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%lld %lld",a+i,b+i);

}
for(int i=0;i<m;i++) scanf("%lld %lld",k+i,p+i);
long long  res=0;bool flag=true;
dp();
long long f=0x7fffffffffffffff;
for(int j=0;j<=10;j++)
{
f=0x7fffffffffffffff;
for(int i=2001;i>=0;i--)
{
f=min(f,d[i][j]);
d[i][j]=f;
}
}
for(int i=0;i<n;i++)
{
long long  r=d[a[i]][b[i]];

if(r>=0x7f7f7f7f7f7f7f7e)
{
flag=false;
break;
}
res+=r;
}
if(!flag)
printf("-1\n");
else
printf("%lld\n",res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: