洛谷P2370题解
题目地址:https://www.luogu.com.cn/problem/P2370
首先,一览全题,这题有着很浓的背包气息,下面是我读题中遇到的细节:
1.题目描述中的 L ,它并不是告诉你的,是你要求的(这让我疑惑了好一会,语文太菜。。)
2.它所要求的传输接口是指最大的文件需要的大小并不是所有的文件需要的大小(而且题目中要求的是最小)
怎么求最小的传输接口呢?二分答案配上dfs?似乎可行但不会写。
传输接口是指最大的文件需要的大小,很明显,我们可以按照 w 值来从小到大排序,找到了第一个就输出,一直找到最后面都找不到,就输出无解。
接下来就是和01背包模板相差无几的 code :
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,p,s; 4 int dp[1500]; 5 struct node{ 6 int w,v; 7 }a[1500]; 8 int cmp(node a,node b){ 9 return a.w<b.w; 10 } 11 int main(){ 12 scanf("%d%d%d",&n,&p,&s); 13 for(int i=1;i<=n;++i)cin>>a[i].w>>a[i].v; 14 sort(a+1,a+n+1,cmp); 15 for(int i=1;i<=n;++i){ 16 for(int j=s;j>=a[i].w;--j){ 17 dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v); 18 if(dp[j]>=p){ 19 cout<<a[i].w; 20 return 0; 21 } 22 } 23 } 24 cout<<"No Solution!"; 25 return 0; 26 }
码字不易,点个赞吧QwQ