• P1510 精卫填海(01背包)


    精卫填海

    题目描述

    本题为改编题。

    发鸠之山,其上多柘木。有鸟焉,其状如乌,文首,白喙,赤足,名曰精卫,其名自詨。是炎帝之少女,名曰女娃。女娃游于东海,溺而不返,故为精卫。常衔西山之木石,以堙于东海。——《山海经》

    精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗?

    事实上,东海未填平的区域还需要至少体积为 v v v 的木石才可以填平,而西山上的木石还剩下 n n n 块,每块的体积和把它衔到东海需要的体力分别为 k k k m m m。精卫已经填海填了这么长时间了,她也很累了,她还剩下的体力为 c c c

    输入格式

    输入文件的第一行是三个整数: v , n , c v,n,c v,n,c

    从第二行到第 n + 1 n+1 n+1 行分别为每块木石的体积和把它衔到东海需要的体力。

    输出格式

    输出文件只有一行,如果精卫能把东海填平,则输出她把东海填平后剩下的最大的体力,否则输出 Impossible(不带引号)。

    样例 #1

    样例输入 #1

    100 2 10
    50 5
    50 5
    
    • 1
    • 2
    • 3

    样例输出 #1

    0
    
    • 1

    样例 #2

    样例输入 #2

    10 2 1
    50 5
    10 2
    
    • 1
    • 2
    • 3

    样例输出 #2

    Impossible
    
    • 1

    提示

    数据范围及约定

    • 对于 20 % 20\% 20% 的数据, 0 < n ≤ 50 00<n50
    • 对于 50 % 50\% 50% 的数据, 0 < n ≤ 1000 00<n1000
    • 对于 100 % 100\% 100% 的数据, 0 < n ≤ 1 0 4 00<n104,所有读入的数均属于 [ 0 , 1 0 4 ] [0,10^4] [0,104],最后答案不大于 c c c

    解析

    01背包,但是要计算使用的符合条件的最小体力数量。
    于是,从后往前遍历dp数组,找到第一个不能满足的体力点,然后+1即为答案
    
    • 1
    • 2
    #include
    using namespace std;
    //#define int long long
    const int N=1e4+5;
    int n,m,c,v[N],w[N],dp[N];
    void solve(){
    	scanf("%d%d%d",&m,&n,&c);
    	for(int i=1;i<=n;i++){
    		scanf("%d%d",&w[i],&v[i]);
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=c;j>=v[i];j--){
    			dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
    		}
    	}
    	if(dp[c]>=m){
    		int x=c;
    		while(dp[x]>=m) x--;
    		cout<<c-(x+1);
    	}
    	else cout<<"Impossible";
    }
    signed main(){
    	int t=1;
    //	scanf("%lld",&t);
    	while(t--) solve();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    11.手写原生ajax
    苹果“FindMy”APP
    DGIOT基于低代码amis配置联动短信告警
    WANLSHOP 直播短视频种草多用户电商系统源码自营+多商户+多终端(H5+小程序+APP)
    [sd-tagging-helper] How to start and how to add tags for dummies
    小程序:如何合理规划分包使主包不超过2M
    java CharArrayReader类、CharArrayWriter类
    【C/C++】C语言太细了
    C多维数组指针(学习笔记)
    计算机提示vcomp120.dll丢失怎样修复,vcomp120.dll丢失的4个修复方法分享
  • 原文地址:https://blog.csdn.net/JungleZRD/article/details/134286604