Codeforces Round #202 (Div. 2)B-贪心

来源:互联网 发布:丁芙妮黑历史 知乎 编辑:程序博客网 时间:2024/05/09 08:39

B:先找数量多的,然后根据剩余的是否能跟现有的凑成一个更大的

下面是代码:

#include<iostream>#include<set>#include<map>#include<vector>#include<queue>#include<cmath>#include<climits>#include<cstdio>#include<string>#include<cstring>#include<algorithm>typedef long long LL;using namespace std;const int M=100050;struct node{    int p,i;} pri[14];bool cmp(node a,node b){    if(a.p!=b.p)return a.p<b.p;    else return a.i>b.i;}int main(){    int v,i;    while(scanf("%d",&v)!=EOF)    {        for(i=1; i<=9; i++)            scanf("%d",&pri[i].p),pri[i].i=i;        sort(pri+1,pri+10,cmp);        int n=v/pri[1].p;        if(n==0)printf("-1\n");        else        {            int res=v-n*pri[1].p,maxx=pri[1].i,kk=0;            while(1)            {                int temp=-1;                maxx=pri[1].i;                for(i=1; i<=9; i++)                {                    if(res+pri[1].p>=pri[i].p&&maxx<pri[i].i)                    {                        temp=i;                        maxx=pri[i].i;                    }                }                if(temp==-1)break;                res=res-pri[temp].p+pri[1].p;                printf("%d",maxx);                kk++;            }            for(; kk<n; kk++)printf("%d",pri[1].i);            printf("\n");        }    }    return 0;}


原创粉丝点击