• [洛谷P2370]yyy2015c01的U盘


    题目大意:有n个文件,每个文件有一个大小和价值,有一个容量为s的U盘,要装这些文件。传输文件需要接口,一个大小为k的接口能传输的最大文件的大小为k。问最少要多大的接口,才能使传输的文件价值$ge p$( 具体见原题)。

    解题思路:二分接口的大小,对于每个二分出的答案,做一次背包问题(如果一个文件的大小大于接口的大小,则直接跳过该文件),判断最大价值是否$ge p$。最后的结果就是答案。在二分时,我们把r设为s+1,如果最后二分得到的答案为s,说明没有答案,输出“No Solution!”。

    C++ Code:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,p,s;
    int v[1005],w[1005],f[1005];
    bool dp(int k){
    	memset(f,0,sizeof f);
    	for(int i=1;i<=n;++i)
    	if(v[i]<=k)
    	for(int j=s;j>=v[i];--j)
    	if(f[j]<f[j-v[i]]+w[i])f[j]=f[j-v[i]]+w[i];
    	return f[s]>=p;
    }
    int main(){
    	scanf("%d%d%d",&n,&p,&s);
    	for(int i=1;i<=n;++i)scanf("%d%d",&v[i],&w[i]);
    	int l=0,r=s+1;
    	while(l<r){
    		int mid=l+r>>1;
    		if(dp(mid))r=mid;else
    		l=mid+1;
    	}
    	if(l>s)puts("No Solution!");else
    	printf("%d
    ",l);
    	return 0;
    }
    
  • 相关阅读:
    没吃过猪肉,却想见识下猪跑
    程序员修电脑
    csdn 新排名系统参考的部分指标
    如何快速适应新工作
    前端学习指北
    公号文章整理
    BUI 视频,音频在线播放
    原生图片上传,图片格式和图片大小处理
    获取路由拼接参数
    Axure RP9调用后端接口操作步骤
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7260103.html
Copyright © 2020-2023  润新知