把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P2370 yyy2015c01 的 U 盘

题面传送门
可以发现大小具有单调性,所以可以二分。
二分后用\(01\)背包验证可行性即可。
代码实现:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int n,m,k,x,y,z,f[1039],l,r,mid,ans;
struct yyy{int x,y;}s[1039];
inline bool cmp(yyy x,yyy y){return x.x<y.x;}
int main(){
	register int i,j;
	scanf("%d%d%d",&n,&m,&k);
	for(i=1;i<=n;i++) scanf("%d%d",&s[i].x,&s[i].y),ans=max(ans,s[i].x);
	sort(s+1,s+n+1,cmp);
	l=0;r=ans+1;
	while(l+1<r){
		mid=(l+r)>>1;
		memset(f,0,sizeof(f));
		for(i=1;i<=n;i++){
			if(s[i].x>mid) break;
			for(j=k;j>=s[i].x;j--) f[j]=max(f[j],f[j-s[i].x]+s[i].y);
		}
		if(f[k]<m) l=mid;
		else r=mid;
		//printf("%d %d\n",mid,f[k]);
	}
	if(r==ans+1) printf("No Solution!");
	else printf("%d\n",r);
}
posted @ 2020-07-10 21:59  275307894a  阅读(32)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end