具体可以看我的提交记录
by chenxsir @ 2024-04-10 17:46:05
求佬们看看
by chenxsir @ 2024-04-10 17:46:28
我试了一下高赞题解代码,也是改成二维数组就只有80分
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int n,p,s;
int dp[1005][1005];//dp[i]表示装i体积的东西能够得到的价值
struct node
{
int v,w;
}a[1005];//在这里定义一个结构体,因为后面要用到排序
int cmp(node a,node b)
{
return a.v<b.v;//简单的排序
}
int main()
{
scanf("%d%d%d",&n,&p,&s);//输入对应的文件总数,希望最小价值p和硬盘大小s
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].v,&a[i].w);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
for(int j=s;j>=a[i].v;j--)//01背包的模板
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i].v]+a[i].w);
if(dp[i][s]>=p)//如果此时装满的情况下得到的价值已经超过了所需,
//那么当前物品的体积就是满足条件的最小体积(因为之前已经排过序了)
{
printf("%d",a[i].v);//直接输出,结束程序
return 0;
}
}
printf("No Solution!"); //输出不满足条件的情况
}
```
by chenxsir @ 2024-04-10 17:55:19
@[chenxsir](/user/218223) 我知道了。二维数组 您for(j)循环没有循环到的地方f就是0,没有拷过去。
by 聊机 @ 2024-04-10 18:02:49
@[聊机](/user/290959) 懂了,万分感谢
by chenxsir @ 2024-04-10 18:05:42