您的位置:首页 > 其它

USACO3.15stamps(dp)

2013-05-28 19:32 337 查看
对dp很无奈。。枚举所有可能达到的值 dp[i]表示到达i值所用最少的邮票

/*
ID: shangca2
LANG: C++
TASK: stamps
*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int p[55],dp[2000010];
bool o[2000010];
int main()
{
freopen("stamps.in","r",stdin);
freopen("stamps.out","w",stdout);
int i,j,k,n;
cin>>n>>k;
for(i = 1 ; i <= k ; i++)
{
cin>>p[i];
o[p[i]] = 1;
dp[p[i]] = 1;
}
for(i = 1 ; ; i++)
{
if(o[i]&&dp[i]<n)
{
for(j = 1 ; j <= k ;j++)
{
o[i+p[j]] = 1;
if(dp[i+p[j]]==0)
dp[i+p[j]] = dp[i]+1;
else
dp[i+p[j]] = min(dp[i]+1,dp[i+p[j]]);
}
}
else if(!o[i])
{
printf("%d\n",i-1);
break;
}
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: