为什么二维数组改成一维数组就AC了

P2370 yyy2015c01 的 U 盘

具体可以看我的提交记录
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


|