













参考代码:
未优化的代码:
- int n;
- int V;
- const int N=1010;
- int v[N];
- int w[N];
- int dp[N][N];
-
- int main()
- {
- cin>>n>>V;
- for(int i=1;i<=n;i++)
- {
- cin>>v[i]>>w[i];
- }
-
- //第一问:
-
- //dp表中的第一行全是0,无需初始化
- //dp表第一列在填写dp表的时候再填
-
- //填表
- for(int i=1;i<=n;i++)
- {
- for(int j=0;j<=V;j++)
- {
- //状态转移方程
- dp[i][j]=dp[i-1][j];
- if(j>=v[i])
- {
- dp[i][j]=max(dp[i][j],dp[i][j-v[i]]+w[i]);
- }
- }
- }
- //输出结果
- cout<
-
- //清空dp表
- memset(dp,0,sizeof(dp));
-
- //第二问:
-
- //初始化第一行
- dp[0][0]=0;
- for(int j=1;j<=V;j++)
- {
- dp[0][j]=-1;
- }
- //第一列无需初始化,在填dp表的时候再填写
-
- //填表
- for(int i=1;i<=n;i++)
- {
- for(int j=0;j<=V;j++)
- {
- //状态转移方程
- dp[i][j]=dp[i-1][j];
- if(j>=v[i]&&dp[i][j-v[i]]!=-1)
- {
- dp[i][j]=max(dp[i][j],dp[i][j-v[i]]+w[i]);
- }
- }
- }
- cout<<(dp[n][V]==-1?0:dp[n][V])<
-
- return 0;
- }
优化后的代码:
-
- int n;
- int V;
- const int N=1010;
- int v[N];
- int w[N];
- int dp[N];
-
- int main()
- {
- cin>>n>>V;
- for(int i=1;i<=n;i++)
- {
- cin>>v[i]>>w[i];
- }
-
- //第一问:
-
- //dp表中的第一行全是0,无需初始化
-
- //填表
- for(int i=1;i<=n;i++)
- {
- //一定要从左往右遍历,具体原因看图解
- for(int j=v[i];j<=V;j++)
- {
- //状态转移方程
- dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
- }
- }
- //输出结果
- cout<
-
- //清空dp表
- memset(dp,0,sizeof(dp));
-
- //第二问:
-
- //初始化第一行
- dp[0]=0;
- for(int j=1;j<=V;j++)
- {
- dp[j]=-1;
- }
-
- //填表
- for(int i=1;i<=n;i++)
- {
- //一定要从左往右遍历,具体原因看图解
- for(int j=v[i];j<=V;j++)
- {
- //状态转移方程
- if(dp[j-v[i]]!=-1)
- {
- dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
- }
- }
- }
- cout<<(dp[V]==-1?0:dp[V])<
-
- return 0;
- }
你学会了吗???
-
相关阅读:
JS案例 轮播图(面向对象),最终版(注释全面)
sdkman 的安装配置与 sdk 管理
Redis数据类型-Hash-存储结构之ziplist
【Android】 四大组件详解之广播接收器、内容提供器
计算机网络-网络层
DFS例题(n皇后问题)C++(Acwing)
mysql之数据表高级操作
flutter 常用命令
突破开源天花板!最强文本转语音工具ChatTTS:对话式高可控的语音合成模型
centos7卸载自带python2
-
原文地址:https://blog.csdn.net/weixin_70056514/article/details/133501704