HDU1248 寒冰王座 【数学题】or【全然背包】

寒冰王座

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 10550    Accepted Submission(s): 5355

Problem Description

不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,仅仅有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前.

死亡骑士:"我要买道具!"

地精商人:"我们这里有三种道具,血瓶150块一个,魔法药200块一个,无敌药水350块一个."

死亡骑士:"好的,给我一个血瓶."

说完他掏出那张N元的大钞递给地精商人.

地精商人:"我忘了提醒你了,我们这里没有找客人钱的习惯的,多的钱我们都当小费收了的,嘿嘿."

死亡骑士:"......"

死亡骑士想,与其把钱当小费送个他还不如自己多买一点道具,反正以后都要买的,早点买了放在家里也好,可是要尽量少让他赚小费.

如今死亡骑士希望你能帮他计算一下,最少他要给地精商人多少小费.

Input

输入数据的第一行是一个整数T(1<=T<=100),代表測试数据的数量.然后是T行測试数据,每一个測试数据仅仅包括一个正整数N(1<=N<=10000),N代表死亡骑士手中钞票的面值.

注意:地精商店仅仅有题中描写叙述的三种道具.

Output

对于每组測试数据,请你输出死亡骑士最少要浪费多少钱给地精商人作为小费.

Sample Input

2
900
250

Sample Output

0
50

全然背包:

#include <stdio.h>
#include <string.h>
#define maxn 10002

int dp[maxn];
const int sample[] = {150, 200, 350};

int main()
{
    int t, n, i, j;
    scanf("%d", &t);
    while(t--){
        scanf("%d", &n);
        memset(dp, 0, sizeof(dp));
        for(i = 0; i < 3; ++i){
            for(j = sample[i]; j <= n; ++j)
                if(dp[j] < dp[j - sample[i]] + sample[i])
                    dp[j] = dp[j - sample[i]] + sample[i];
        }
        printf("%d\n", n - dp[n]);
    }
    return 0;
}

网上找的还有一种思路:

因为150+200=350。所以350的物品能够忽略,先採用150的物品。考虑最后的余数,若余数大于50,那么将当中的一个物品换成200的。这样一来,余数就降低了50.代码实现:

#include <stdio.h>

int main()
{
    int t, n, ans, m;
    scanf("%d", &t);
    while(t--){
        scanf("%d", &n);
        ans = n % 150;
        m = n / 150;
        while(ans >= 50 && m--)
            ans -= 50;
        printf("%d\n", ans);
    }
    return 0;
}
时间: 2024-12-25 23:24:43

HDU1248 寒冰王座 【数学题】or【全然背包】的相关文章

解题报告:hdu1248寒冰王座 - 完全背包

2017-09-03 16:16:38 writer:pprp 完全背包问题:从左向右进行扫描,用一维阵列进行分析 代码如下: /* @theme:hdu1248 寒冰王座 @writer:pprp @begin:16:00 @end:16:14 @declare:完全背包问题 @error:方向问题,这次是从左向右进行扫描 @date:2017/9/3 */ #include <bits/stdc++.h> using namespace std; const int maxn = 1010

HDU1248 寒冰王座 【数学题】or【完全背包】

寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10550    Accepted Submission(s): 5355 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑士

简单dp --- HDU1248寒冰王座

这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: 1 #include<iostream> 2 #include <stdio.h> 3 using namespace std; 4 int dp[10010]; 5 int main() 6 { 7 for (int i = 0; i < 150; i++) 8 dp[i] = i; 9 for (int i = 151; i

HDU 1248寒冰王座-全然背包或记忆化搜索

寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13001    Accepted Submission(s): 6620 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,仅仅有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑

杭电 1248 寒冰王座(完全背包)

http://acm.hdu.edu.cn/showproblem.php?pid=1248 寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10792    Accepted Submission(s): 5476 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票

HDU1248_寒冰王座(背包/完全背包)

解题报告 题目传送门 无聊的水题. #include <iostream> #include <cstring> #include <cstdio> #define inf 0x3f3f3f3f using namespace std; int c[10100],w[10100],dp[11000],v,n; int main() { int t,i,j; scanf("%d",&t); while(t--) { memset(dp,0,si

HDU 1248寒冰王座-完全背包或记忆化搜索

寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13001    Accepted Submission(s): 6620 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑士

HDU 1248 寒冰王座 (水题的N种做法!)(含完全背包)

寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13177    Accepted Submission(s): 6718 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑士:

hdoj 1248 寒冰王座 【完全背包】

寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13257    Accepted Submission(s): 6774 Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑士