HDU 2018 undefined

题目思路:完全背包,dp[i][j]代表,砍j只怪,用i点疲劳最多能获得的经验值.

和平常的完全背包不一样的是多了一个限制条件:最多只砍S只怪,所以我们应该多一重循环来q:for 1->S,代表某种怪砍q只。

代码:

#include<cstdio>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 1005

using namespace std;

int dp[MAX][MAX],w[MAX],v[MAX];

int main()
{
    int n,m,k,s,i,j,q,minn;

    while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF)
    {
        minn=INF;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=k;i++)
        {
            scanf("%d%d",&v[i],&w[i]);
        }
        for(i=1;i<=m;i++)
        {
            for(j=1;j<=k;j++)
            {
                for(q=1;q<=s;q++)
                {
                    int cnt=1;
                    while(cnt*w[j]<=i && cnt<=q)
                    {
                        dp[i][q]=max(dp[i][q],dp[i-cnt*w[j]][q-cnt]+cnt*v[j]);
                        cnt++;
                    }
                }
            }
            if(dp[i][s]>=n)//如果获得的经验已经大于n就没必要进行下去了
                break;
        }
        if(i<=m)
            printf("%d\n",m-i);
        else
            printf("-1\n");
    }
    return 0;
}

时间: 2024-08-11 09:57:13

HDU 2018 undefined的相关文章

HDU 2018 DP

A - 母牛的故事 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2018 Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的

HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 5943    Accepted Submission(s): 2004 Problem Description Before

HDU - 2018 :递推

http://acm.hdu.edu.cn/showproblem.php?pid=2018 #include <stdio.h> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <assert.h> #include <set> #include <cmath> #include <que

hdu 2018(母牛问题)2019(数列有序!)2020(绝对值排序 )2021(发工资)2022(海选女主角)

要发现它的规律,题n年牛的总数等于n-1年的母牛数加上第n年新增的母牛数,第n年只有n-3年的那些母牛才能产母牛,所以第n年的母牛数等于第n-1和n-3年的母牛数的和,即sum(n)=sum(n-1)+sum(n-3),可用递归来做 1 #include<cstdio> 2 #include<cmath> 3 #include<string.h> 4 #include<iostream> 5 #include<algorithm> 6 using

hdu 2018 多校 第五场

1002 小洛洛 开场挂了N发插入排序的我( 最后还是要靠小洛洛写暴力 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <cmath> 5 #include <cstdlib> 6 #include <algorithm> 7 using namespace std; 8 9 const int N = 12; 10 11 int mi

hdu 2018 母牛的故事(递推)

第i年的牛数=第i-1年的+第i-1年能生的 dp[i] = dp[i-1] + dp[i-3]; ( i >= 4 ) #include <iostream> #include <cstdio> using namespace std; int dp[60]; int main() { dp[1] = 1; dp[2] = 2; dp[3] = 3; for( int i = 4; i <= 55; i++ ) dp[i] = dp[i-1] + dp[i-3]; i

Hdu 2018母牛的故事

母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 83526    Accepted Submission(s): 41487 Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试

hdu 2018 母牛的故事(java)

问题: 此题主要是一个递推算法,审题要仔细,小母牛是自它被生下开始第四年开始产子,递归公式为n=a(n-1)+(n-3). 之前看过别人的算法用了大数,其实没必要,在范围内int就可以装下. 母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 51574    Accepted Submission(s): 25849 Prob

hdu 2018 数列有序!(java)

问题: 再插入数字时,没有中断循环,导致从输入数处再次循环,如下错误结果: 3 3 1 2 4 1 2 3 3 4 3 1 2 4 5 1 2 3 3 4 当循环完成后记得中断: 数列有序! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 57301    Accepted Submission(s): 24693 Problem De