| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大家帮帮忙,tle。。。/*
s[i]表示i能否取到,然后不断更新s即可,如果用个队列维护待更新的节点速度应该会更快
*/
#include <iostream>
const int MAXN = 100010;
int s[MAXN], st[MAXN], inq[MAXN];
int main(){
int t, n;
while (scanf("%d%d",&t,&n))
{
int k, num;
memset(s, 0, sizeof(s));
memset(inq, 0, sizeof(inq));
s[0] = true;
for (int i = 0; i < n; ++i){
scanf("%d%d",&k,&num);
memset(st, 0, sizeof(st));
for (int i = 0; i <= k; ++i){
for (int j = t - num * i; j >= 0; --j){
if (s[j]) st[j + num * i] = true;
}
}
memcpy(s, st, sizeof(s));
}
for (int p = t; p >= 0; --p){
if (s[p])
{
printf("%d\n",p);
break;
}
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator