cf#306-B. Preparing Olympiad-bitmask暴力
2015-10-08 07:44
267 查看
n=15,L,R,X
给你n个背包,每个带有一个价值
要求你选一定数量的背包, 使得总价值sum>=L && sum<=R
并且单个背包最大价值maxx-最小价值minn >= X;
n太小,直接用 数的二进制表示每个背包的选择状态,最多就2^15
对每个状态判断一下是否合法即可
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
#define inf 1e9+1
__int64 tm[20];
int main()
{
__int64 i;
__int64 n,l,r,x;
scanf("%I64d%I64d%I64d%I64d",&n,&l,&r,&x);
for (i=1;i<=n;i++)
scanf("%I64d",&tm[i]);
__int64 cun=(__int64)pow(2.0,n)-1;
__int64 ans=0;
for (i=1;i<=cun;i++)
{
__int64 sum=0;
__int64 minn=inf;
__int64 maxx=0;
__int64 tmp=i;
__int64 cou=1;
while(tmp)
{
if (tmp&1)
{
sum+=tm[cou];
if (tm[cou]>maxx)
maxx=tm[cou];
if (tm[cou]<minn)
minn=tm[cou];
}
tmp>>=1;
cou++;
}
if (sum>=l&&sum<=r )
if (maxx-minn>=x)
ans++;
}
printf("%I64d\n",ans);
return 0;
}
给你n个背包,每个带有一个价值
要求你选一定数量的背包, 使得总价值sum>=L && sum<=R
并且单个背包最大价值maxx-最小价值minn >= X;
n太小,直接用 数的二进制表示每个背包的选择状态,最多就2^15
对每个状态判断一下是否合法即可
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
#define inf 1e9+1
__int64 tm[20];
int main()
{
__int64 i;
__int64 n,l,r,x;
scanf("%I64d%I64d%I64d%I64d",&n,&l,&r,&x);
for (i=1;i<=n;i++)
scanf("%I64d",&tm[i]);
__int64 cun=(__int64)pow(2.0,n)-1;
__int64 ans=0;
for (i=1;i<=cun;i++)
{
__int64 sum=0;
__int64 minn=inf;
__int64 maxx=0;
__int64 tmp=i;
__int64 cou=1;
while(tmp)
{
if (tmp&1)
{
sum+=tm[cou];
if (tm[cou]>maxx)
maxx=tm[cou];
if (tm[cou]<minn)
minn=tm[cou];
}
tmp>>=1;
cou++;
}
if (sum>=l&&sum<=r )
if (maxx-minn>=x)
ans++;
}
printf("%I64d\n",ans);
return 0;
}
相关文章推荐
- Trapping Raining Water 解答
- CF#306- A - Two Substrings-水题
- Operating System: Three Easy Pieces --- Page Replacement (Note)
- POJ1062 昂贵的聘礼(dijkstra)
- Java理论学时第二节。课后作业。
- java练习题
- 导出WEB页内容的思路
- HDMI转LVDS,HDMI转RGB,MHL转RGB,MHL转LVDS,HDMI接收端,MHL接收端,LT8619B业界最新产品
- 【Android-006】【对话框】
- UVa 11068 - An Easy Task
- 【Android-005】【ListView】
- 连接池排名
- OSChina 周四乱弹 —— 假期综合症走起
- 学习 MEANJS 的地方
- 连载《一个程序猿的生命周期》- 35、提出辞职,老板为何发怒?
- 连载《一个程序猿的生命周期》- 35、提出辞职,老板为何发怒?
- C#学习之多线程开发技术(十四)
- 果壳豆瓣外链推广技巧
- Node.js开发入门—Buffer用法详解
- 【Android-004】【SQLite数据库】