HDOJ - 2375 状态DP..
来源:互联网 发布:如何打击网络恐怖主义 编辑:程序博客网 时间:2024/04/30 00:14
pizza总共只有15个..用二进制数表示当前选择了那些pizza..2^15-1=35535..dp[k]..k则是二进制状态的十进制值...dp[k]代表选择了这些pizza所需的最小费用..
用arc[y][x]记录拥有了y Pizza.. 则可以买x Pizza打arc[y][x]折...预处理中所有arc[y][x]=1..然后再更新arc...
更新..比如k=7, 二进制为111..由于是多了一个1...所以可能从h=110(6) or 101(5) o 011(3) 更新来的...本题说coupon可以合在一起用..那么将当前更新时h中所有对于当前选择添加x Pizza的discount相乘..再乘以x的原价...
Program:
#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<math.h>#include<map>#include<queue>#include<stack>#include<set>#define ll long long#define oo 2000000000#define pi acos(-1) using namespace std;struct node{ int p,a;}s[20];double arc[20][20],dp[40000];int n;int main(){ int i,j,m,h,k,x; while (~scanf("%d",&n)) { if (!n) break; for (i=1;i<=n;i++) for (j=1;j<=n;j++) arc[i][j]=1; for (i=0;i<=35000;i++) dp[i]=1e+30; for (i=1;i<=n;i++) { scanf("%d%d",&s[i].p,&s[i].a); dp[1<<(i-1)]=s[i].p; scanf("%d",&m); while (m--) { scanf("%d%d",&j,&x); arc[i][j]=(100-x)/100.0; } } double ans,area,data,M=(1<<n)-1; ans=1e+30; for (h=1;h<=M;h++) { area=0; for (x=1;x<=n;x++) if (h & (1<<(x-1))) { area+=s[x].a; k=h-(1<<(x-1)); data=1; for (j=1;j<=n;j++) if (k & (1<<(j-1))) data*=arc[j][x]; if (dp[h]>dp[k]+data*s[x].p) dp[h]=dp[k]+data*s[x].p; } if (dp[h]/area<ans) ans=dp[h]/area; } printf("%.4lf\n",ans); } return 0;}
- HDOJ - 2375 状态DP..
- hdoj 4906 状态dp
- HDOJ - 3578 DP...巧妙构造DP状态
- HDOJ 2640 - Toy bricks 状态压缩DP
- HDOJ 1074 Doing Homework (状态压缩DP)
- HDOJ 4049 Tourism Planning(状态压缩DP)
- HDOJ 4336 Card Collector (状态压缩DP)
- HDOJ 2167 Pebbles (状态压缩dp)
- hdoj 1074 Doing Homework 【状态压缩dp】
- hdoj 5045 (dp 状态压缩)
- HDOJ 4529 - N骑士问题 状态压缩DP
- hdoj 4310 Hero (状态压缩DP)
- HDOJ 1400 & POJ 2411 - Mondriaan's Dream 状态压缩DP
- HDOJ 4310 - Hero 简单的状态压缩DP
- 【最短路+状态压缩DP】 HDOJ 4856 Tunnels
- HDOJ 5067Harry And Dig Machine(状态压缩DP)
- hdoj 5125 Little Zu Chongzhi's Triangles【状态压缩dp】
- HDOJ 1074.Doing Homework(状态压缩DP)
- tomcat启动不加载项目
- hdu 3367 Pseudoforest (并查集)
- BASH命令和SHELL脚本总结(10)脚本互相调用篇
- NetworkLocation for WES7
- android中列表选项、单选选项、多选选项对话框的使用
- HDOJ - 2375 状态DP..
- try catch finally 的执行顺序
- Java数组排序Arrays.sort,以及Comparator接口的用法
- Android 系统framework 概述
- android Toast大全(五种情形)
- 羌笛声声胡笳怨,此心长寄天涯远
- ESC键是怎么产生的?
- ubuntu (HD Graphics 3000)调分辨率
- androidLCD和键盘 背光亮度设置