• dp之完全背包 hdu--2159一维数组做法


    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    int main()
    {
        int n,m,t,s;
        int dp[205];
        int w[205];
        int v[205];
        int cnt[205];
        while(~scanf("%d %d %d %d",&n,&m,&t,&s))
        {
            memset(dp,0,sizeof(dp));
            memset(cnt,0,sizeof(cnt));
            for(int i=0;i<t;i++)
            {
                scanf("%d %d",&v[i],&w[i]);
            }
            for(int i=0;i<t;i++)
            {
                for(int j=w[i];j<=m;j++)//顺序,如果逆序的话就是01背包的问题了
                {
                    if(dp[j]<dp[j-w[i]]+v[i])
                    {
                        cnt[j]=cnt[j-1]+1;//如果多取一件东西的经验更多的话,就打怪次数增加
                        dp[j]=dp[j-w[i]]+v[i];
                    }
                }
            }
            int ans=-1;
            for(int j=0;j<=m;j++)
            {
                if(dp[j]>=n&&cnt[j]<=s)
                {
                    ans=m-j;
                    break;
                }
            }
             cout<<ans<<endl;
        }
        return 0;
    }

  • 相关阅读:
    天文望远镜(二)
    天文望远镜(一)
    安静
    JavaScript 私有类字段和 TypeScript 私有修饰符
    js解析剪切板里的excel内容
    js正则
    jquery扩展方法:实现模拟Marquee无限循环滚动
    js中onload和ready区别
    Js如何从字符串中提取数字?
    JSBridge 初探
  • 原文地址:https://www.cnblogs.com/chinacwj/p/7053844.html
Copyright © 2020-2023  润新知