栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3900 The Robbery

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3900 The Robbery

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;struct node{    long long value;    long long weight;    int num;}box[20];int n;long long m;long long ans;long long sum[20];      bool cmp(const node &a,const node &b)   {return a.value*1.0/a.weight>b.value*1.0/b.weight;}inline bool cut(int pos,long long value,long long left){    if(pos==n+1) return true;if(value+sum[pos]<=ans) return true; double best=(box[pos].value*1.0/box[pos].weight);       if(value+(long long)ceil(best*left)<=ans) return true;      return false;}void dfs(int pos,long long value,long long left){    ans=max(ans,value);    if(cut(pos,value,left)) return; for(int i=box[pos].num;i>=0;i--){       if(left-box[pos].weight*i<0) continue;          dfs(pos+1,value+box[pos].value*i,left-box[pos].weight*i);    }}int main(){    int cas;    long long sumv;    long long sumw;    scanf("%d",&cas);    while(cas--)    {        ans=0;        sumv=sumw=0;        scanf("%d%lld",&n,&m);        for(int i=1;i<=n;i++)        { scanf("%lld",&box[i].weight); sumw+=box[i].weight*i;        }        for(int i=1;i<=n;i++)        { scanf("%lld",&box[i].value); box[i].num=i; sumv+=box[i].value*i;        }        if(sumw<=m)        { printf("%lldn",sumv); continue;        }        sort(box+1,box+1+n,cmp);        sum[n+1]=0;        for(int i=n;i>=1;i--)        { sum[i]=sum[i+1]+box[i].value*box[i].num;        }        dfs(1,0,m);        printf("%lldn",ans);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号