Vijos 1104 采药

来源:互联网 发布:华为盐城大数据产业园 编辑:程序博客网 时间:2024/05/04 18:38

快哭了背包一直是心中的痛。

今天一群大神聊天,说递归,DP,图论 是程序员的三道坎。

好吧。我现在要跨过第二个。


状态转移图。

就是把 a[总时间]=max(a[上一个药+这个药]+这个药的价值,a[总时间];

AC代码

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[1001];struct lx{    int t,s;}l[101];int n,m;int main(){    while(~scanf("%d%d",&n,&m))    {        for(int i=1;i<=m;i++)        scanf("%d%d",&l[i].t,&l[i].s);        memset(dp,0,sizeof(dp));        for(int i=1;i<=m;i++)        {            for(int j=n;j>=l[i].t;j--)            dp[j]=max(dp[j],dp[j-l[i].t]+l[i].s);        }        int tmp=0;        for(int i=0;i<=n;i++)        tmp=max(tmp,dp[i]);        printf("%d\n",tmp);    }}


0 0