| ||||||||||
| 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 | |||||||||
1742老是WA, 不知道哪儿错了, 高人帮忙看一下, 先谢了//ACM ICPC 2006 Coins
//by Michael
//program for nothing
#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <string>
#include <bitset>
#include <algorithm>
#include <functional>
#include <utility>
#include <cstdlib>
#include <cctype>
#include <ctime>
#include <cstdio>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
typedef long long llong;
int size;
int maxPrize;
int reach[100002];
vector<int> coins;
vector<int> number;
#define INF 0x0F0F0F0F
int calculate()
{
memset(reach, 0x0F, sizeof(reach) );
int most = 0;
int result = 0;
int base = 1; //区分第几个coin
reach[0] = 0;
for(int i = 0; i < size; ++i)
{
most = min(maxPrize, most+coins[i]*number[i]);
for(int j = coins[i]; j <= most; ++j)
if ( reach[j] == INF )
{
if ( reach[j-coins[i]] < INF )
{
if ( reach[j-coins[i]] < base )
{
reach[j] = base;
++result;
}
else if ( reach[j-coins[i]] < base+number[i]-1 )
{
reach[j] = 1+reach[j-coins[i]];
++result;
}
}
}
base += number[i];
}
return result;
}
int main()
{
cin>>size>>maxPrize;
while ( size || maxPrize )
{
int t;
for(int i = 0; i < size; ++i)
{
cin>>t;
coins.push_back(t);
}
for(int i = 0; i < size; ++i)
{
cin>>t;
number.push_back(t);
}
cout<<calculate()<<endl;
cin>>size>>maxPrize;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator