| ||||||||||
| 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 | |||||||||
勉强的过了在原有的货币基础上扩充,比如1,2,3,那我认为有无限的-1,-2,-3(因为商人有无数的货币而且相对于我们是负的),这样这个问题又变成了普通的货币问题,但是也带来了一些问题,而解决这些问题花了一些额外的开销,一个没有想清楚的问题是开多大的数组,因为引入了负的可能,所以数组不可能计算到total就为止,由于很晚了,只想到这里,
#include <iostream>
#include <vector>
/*
pkoj fewest coin
*/
using namespace std;
struct dp_res
{
int res;
vector<int> cost;
};
int coins_dp(int coins[],int nums[],int length,int total)
{
int max=coins[0];
for(int i=1;i<length;i++)
{
if(max<coins[i])
max=coins[i];
}
int size=20000;
dp_res* res=new dp_res[size+1];
for(int i=0;i<=size;i++)
{
res[i].res=1111;
}
res[0].res=0;
for(int i=0;i<length;i++)
{
if(coins[i]>0)
{
res[coins[i]].res=1;
res[coins[i]].cost.push_back(coins[i]);
}
}
for(int j=1;j<=size;j++)
{
for(int i=0;i<length;i++)
{
if(j>=coins[i]&&(j-coins[i])<=size&&res[j].res>(res[j-coins[i]].res+1))
{
int count=1;
for(int k=0;k<res[j-coins[i]].cost.size();k++)
{
if(res[j-coins[i]].cost.at(k)==coins[i])
count++;
}
if(nums[i]>=count)
{
res[j].res=res[j-coins[i]].res+1;
res[j].cost=res[j-coins[i]].cost;
res[j].cost.push_back(coins[i]);
}
}
}
}
for(int j=size;j>=1;j--)
{
for(int i=0;i<length;i++)
{
if(j>=coins[i]&&(j-coins[i])<=size&&res[j].res>(res[j-coins[i]].res+1))
{
int count=1;
for(int k=0;k<res[j-coins[i]].cost.size();k++)
{
if(res[j-coins[i]].cost.at(k)==coins[i])
count++;
}
if(nums[i]>=count)
{
res[j].res=res[j-coins[i]].res+1;
res[j].cost=res[j-coins[i]].cost;
res[j].cost.push_back(coins[i]);
}
}
}
}
if(res[total].res==1111) cout<<-1<<endl;
else cout<<res[total].res<<endl;
return 0;
}
int main()
{
int N,T;
cin>>N>>T;
int* coins=new int[2*N];
int* nums=new int[2*N];
for(int i=0;i<2*N;i+=2)
{
cin>>coins[i];
coins[i+1]=-coins[i];
}
for(int i=0;i<2*N;i+=2)
{
cin>>nums[i];
nums[i+1]=1000000;
}
coins_dp(coins,nums,2*N,T);
return 0;
}
希望有人提出意见,前后过了2遍,我自己都觉得sb了
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator