lrj 9.2.3
2024-10-08 03:28:59
int INF = -(<<); // 记忆化搜索
min[] = ;
int dp(int i) {
if(maxv[i] != -)
return maxv[i];
maxv[i] = -INF;
for(int j = ; j <= n; j++)
if(i >= V[j])
maxv[i] = max(maxv[i], dp(i-V[j]) + );
return maxv[i];
} printf("%d\n", dp[S]); // 递推
maxv[] = ;
for(int i = ; i <= S; i++) {
maxv[i] = -INF;
}
for(int i = ; i <= S; i++)
for(int j = ; j <= n; j++)
if(i >= V[j])
maxv[i] = max(maxv[i], maxv[i-V[j]] + );
// 上面这条语句相当于
//if(maxv[i] < maxv[i-V[j]] + 1) {
// maxv[i] = maxv[i-V[j]] + 1;
} printf("%d\n", maxv[S]); void print_ans(int* maxv, int S) {
for(int j = ; j <= n; j++)
if(S >= V[j] && maxv[S] == maxv[S-V[j]] + ) {
printf("%d ", j);
print_ans(maxv, S-V[j]);
break;
}
} // 递推 2
maxv[] = ;
for(int i = ; i <= S; i++) {
maxv[i] = -INF;
}
for(int i = ; i <= S; i++)
for(int j = ; j <= n; j++)
if(i >= V[j]) {
if(maxv[i] < maxv[i-V[j]] + ) {
maxv[i] = maxv[i-V[j]] + ;
max_coin[i] = j;
}
} void print_ans(int* max_coin, int S) {
while(S) {
printf("%d ", max_coin[S]);
S -= V[max_coin[S]];
}
}
最新文章
- mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案
- Android 四大组件之三(广播)
- SSH web.xml文件配置
- ionic react-native和native开发移动app到底那个好
- LinQ系列文章
- Linq中Union与Contact方法用法对比
- bzoj4171 or 省队集训day3 chess: Rhl的游戏
- SQLSERVER一个比较不错的分页存储过程p_splitpage
- 《Java并发编程实战》第七章 取消与关闭 读书笔记
- HTML 概述
- Java集合系列[4]----LinkedHashMap源码分析
- android studio运行的时候出现Unable to obtain debug bridge错误的解决办法
- fabric.js和高级画板
- PyQt5嵌入matplotlib动画
- pytest进阶之xunit fixture
- 记录opencv编译过程
- 详解Vue Native
- JS之console.log详解以及兄弟姐们邻居方法扩展
- SpringBoot 推荐博客
- Jquery 组 checkbox全选checkbox