HLG 1627 猪猪罐 背包

此算法解决了一个有趣的问题:通过已知的硬币价值和重量,以及猪猪罐的总重量,来计算罐内硬币的最低总价值。采用动态规划方法,实现了高效的求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猪猪罐
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 26(16 users)Total Accepted: 16(16 users)Rating: Special Judge: No
Description

ikki有一个小金库,这是一个猪猪罐,猪猪罐里面放了一些硬币。ikki知道了每种硬币的价值和重量,并且还知道空猪猪罐的重量,现在ikki想知道这个猪猪罐里至少放了价值为多少的硬币,她只能称出整个猪猪罐的总重量,你能帮她计算一下么?

Input

多组测试数据,第一行给出一个整数T表示测试数据的组数。

对于每组数据:

第一行输入两个正整数EV,其中E表示空猪猪罐的重量,V表示放了硬币之后猪猪罐的总重量。(1<=E<=V<=10000

第二行输入一个整数N表示硬币的种数。(1<=N<=50

接下来的N行,每行两个整数vw分别表示每种硬币的价值和重量。(1<=v<=50000,1<=w<=10000

Output

对于每组数据输出猪猪罐中硬币价值可能的最小值,如果不存在则输出”Impossible”

每组输出占一行。
Sample Input
3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4
Sample Output
60
100
Impossible
Author
周洲@hrbust

SubmitStatisticDiscussSharedcodes


ACcode:

#pragma warning(disable:4786)//使命名长度不受限制
#pragma comment(linker, "/STACK:102400000,102400000")//手工开栈
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <stack>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define rds(x) scanf("%s",x)
#define rdc(x) scanf("%c",&x)
#define ll long long int
#define maxn 5000105
#define mod 1000000007
#define INF 0x3f3f3f3f //int 最大值
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)
#define MT(x,i) memset(x,i,sizeof(x))
#define PI  acos(-1.0)
#define E  exp(1)
using namespace std;
int a[maxn],b[maxn],dp[maxn],n,v,loop,x,y;
int main(){
    rd(loop);
    while(loop--){
        rd2(x,y);v=y-x;rd(n);
        FOR(i,1,n)rd2(a[i],b[i]);
        FOR(i,1,v)dp[i]=INF;
        FOR(i,1,n)for(int j=b[i];j<=v;++j)
        dp[j]=min(dp[j],dp[j-b[i]]+a[i]);
        if(dp[v]==INF)printf("Impossible\n");
        else printf("%d\n",dp[v]);
    }
    return 0;
}
/*
3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值