HDU 1203 I NEED A OFFER!(01背包)
2015-08-17 21:24
441 查看
题目地址:点击打开链接
思路:刚开始没想到是01背包,看了别人的解题报告才懂的,算是一道好题吧,和普通背包放东西有点不一样,需要从对立面思考,正面情况太多,求1减去份 也收不到的概率即可
AC代码:
训练赛又练了一遍,发现还是不太熟练,把我写注解的代码贴上来吧
AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
typedef long long ll;
using namespace std;
double dp[10010];
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m))
{
if(n + m == 0)
break;
for(i=0; i<=n; i++)//记得从0开始
{
dp[i] = 1.0;
}
int cost;
double value;
for(i=0; i<m; i++)
{
scanf("%d%lf",&cost,&value);
value = 1.0 - value;
for(j=n; j>=cost; j--)
{
dp[j] = min(dp[j],dp[j-cost] * value);//因为j-cost有可能为0,所以dp得从0开始
}
}
printf("%.1lf%%\n",(1-dp
)*100);
}
return 0;
}
思路:刚开始没想到是01背包,看了别人的解题报告才懂的,算是一道好题吧,和普通背包放东西有点不一样,需要从对立面思考,正面情况太多,求1减去份 也收不到的概率即可
AC代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int cost[10001]; double value[10001],dp[10001]; int main() { int n,m,i,j; while(scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); if(n + m == 0) break; for(i=0; i<m; i++) { scanf("%d%lf",&cost[i],&value[i]); } for(i=0; i<=n; i++) { dp[i] = 1.0; } for(i=0; i<m; i++) { for(j=n; j>=cost[i]; j--) { dp[j] = min(dp[j],dp[j-cost[i]] * (1 - value[i])); } } printf("%.1lf%%\n",(1-dp )*100); } return 0; }
训练赛又练了一遍,发现还是不太熟练,把我写注解的代码贴上来吧
AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
typedef long long ll;
using namespace std;
double dp[10010];
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m))
{
if(n + m == 0)
break;
for(i=0; i<=n; i++)//记得从0开始
{
dp[i] = 1.0;
}
int cost;
double value;
for(i=0; i<m; i++)
{
scanf("%d%lf",&cost,&value);
value = 1.0 - value;
for(j=n; j>=cost; j--)
{
dp[j] = min(dp[j],dp[j-cost] * value);//因为j-cost有可能为0,所以dp得从0开始
}
}
printf("%.1lf%%\n",(1-dp
)*100);
}
return 0;
}
相关文章推荐
- JS将下拉框的disable变为able的方法
- Angularjs的简单使用
- [持续更新]JavaScript学习笔记(五)
- Html本地数据存储Web Storage
- jQuery 表单数据序列化为json格式
- find the safest road
- HEALTHY LIFE OPENCART 自适应主题模板 ABC-0133
- poj 3253 Fence Repair(优先队列)
- Node.js静态文件服务器实战(接触nodejs开发中比较实用的部分技巧,获益匪浅)
- HEALTHY LIFE OPENCART 自适应主题模板 ABC-0133
- uva 1308 - Viva Confetti(几何)
- json解析 本地文件和网上文件(通过接口)
- js中如何获取时间
- hdoj 1596 find the safest road 【dijkstra】
- js的2种继承方式详解
- CSS中的body的默认margin
- jquery---基本标签
- 全国首部arcgis for javascript 二次开发视频教程
- jquery事件
- 第5章 JSP语法及应用分析