poj 1170 记忆化搜索
来源:互联网 发布:台湾大陆 知乎 编辑:程序博客网 时间:2024/06/05 18:34
就是简单的记忆化搜索
dp[num0][num1][num2][num3][num4] 表示数量分别为num0 num1....num4的五种物品的最少价钱
然后向下dp就是的啦~~~~~~
AC代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX 0x3f3f3f3fstruct BP{ int cnt; int num[6]; int price;};int hashs[1000];BP bp[100];int B, S;int number[6], price[6];int dp[6][6][6][6][6];int DFS( int num0, int num1, int num2, int num3, int num4 ){ if( !( num0 || num1 || num2 || num3 || num4 ) ){ return 0; } if( dp[num0][num1][num2][num3][num4] != MAX ){ return dp[num0][num1][num2][num3][num4]; } int ans = MAX; for( int i = 0; i < S; i++ ){ if( num0 >= bp[i].num[0] && num1 >= bp[i].num[1] && num2 >= bp[i].num[2] && num3 >= bp[i].num[3] && num4 >= bp[i].num[4] ){ ans = min( ans, bp[i].price + DFS( num0 - bp[i].num[0], num1 - bp[i].num[1], num2 - bp[i].num[2], num3 - bp[i].num[3], num4 - bp[i].num[4]) ); } } ans = min( ans, num0 * price[0] + num1 * price[1] + num2 * price[2] + num3 * price[3] + num4 * price[4] ); return dp[num0][num1][num2][num3][num4] = ans;}int main(){ while( scanf( "%d", &B ) != EOF ){ memset( number, 0, sizeof( number ) ); memset( price, 0, sizeof( price ) ); memset( hashs, 0, sizeof( hashs ) ); memset( dp, 0x3f, sizeof( dp ) ); memset( bp, 0, sizeof( bp ) ); int pos = 0; for( int i = 0; i < B; i++ ){ int temp1, temp2, temp3; cin >> temp1 >> temp2 >> temp3; hashs[temp1] = pos; number[pos] = temp2; price[pos] = temp3; pos++; } cin >> S; for( int i = 0; i < S; i++ ){ cin >> bp[i].cnt; for( int j = 0; j < bp[i].cnt; j++ ){ int temp; cin >> temp; cin >> bp[i].num[hashs[temp]]; } cin >> bp[i].price; } cout << DFS( number[0], number[1], number[2], number[3], number[4] ) << endl; } return 0;}
0 0
- poj 1170 记忆化搜索
- 【记忆化搜索】POJ
- POJ-1088 记忆化搜索
- poj-3280-记忆化搜索
- poj 1143 记忆化搜索
- poj 1179 记忆化搜索
- poj 1664 记忆化搜索
- poj 3249 记忆化搜索
- POJ 1661 记忆化搜索
- poj 1088(记忆化搜索)
- poj 3373(记忆化搜索)
- poj 1088 记忆化搜索
- poj 1088 记忆化搜索
- poj 1579(记忆化搜索)
- POJ 1088 记忆化搜索
- poj滑雪(记忆化搜索)
- POJ 1191 记忆化搜索
- poj 1088 记忆化搜索
- 安装NFS服务,并挂载到开发板
- bochs 配置文件问题
- spark与磁盘交互,spark读hdfs
- bit,byte,word,long word转换关系
- Remove Duplicates from Sorted List
- poj 1170 记忆化搜索
- jobdu 1480 最大上升子序列和结题报告 动态规划问题
- 最基本的数据结构知识
- 云计算仿真工具CloudSim
- 补充《通过Windbg利用VMware虚拟机进行双机调试》
- 容器类常用方法(5)
- 良好的测试用例管理对测试执行的益处
- gdb调试时查看宏信息
- java synchronized详解