codeforces 19B Checkout Assistant DP

题意:一个人在超市偷东西,一秒偷一件,求最小花费

思路:dp[i]表示拿走i件物品的最小花费,那么答案就是dp[n]

dp[i]=min(dp[i],dp[i-t[j]-1]+c[j]);

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
#define eps 1e-8
#define LL long long
LL dp[2005];
LL t[2005],c[2005];
int main()
{
    int T,i,j,k,m,n,ans,a,b;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<=2000;i++)
            dp[i]=9999999999999;
        for(i=0; i<n; i++)
        {
            scanf("%lld%lld",&t[i],&c[i]);
            t[i]++;
        }
        dp[0]=0;
        for(i=0; i<n; i++)
        {
            for(j=n;j>=0;j--)
            {
                if(j-t[i]<0) dp[j]=min(dp[j],c[i]);
                else dp[j]=min(dp[j],dp[j-t[i]]+c[i]);
            }
        }
        printf("%lld\n",dp[n]);
    }
    return 0;
}

 

posted on 2016-03-31 18:24  13rj1115  阅读(289)  评论(0编辑  收藏  举报

导航