敬畏之心 2020-01-17 20:26 采纳率: 0%
浏览 154

n个人每个人有不同数值的钱,需要凑出y钱,并且使每个人剩余下来的钱尽可能一样多。

n个人每个人有不同数值的钱,需要凑出y钱,并且使每个人剩余下来的钱尽可能一样多,钱只能是整数。例如有ABCD4个人,钱数分别是4,3,2,1,然后需要凑5元。那么结果应该是A出3元B出2元,CD不用出,生下来就是A1B1C2D1,钱多的先出去,要使得每个人剩下来的钱尽可能一样多

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-26 13:31
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    #include <stdio.h>
    int main(){
        int n,y;
        scanf("%d%d",&n,&y);
        int a[n],b[n];
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=0;i<n;i++){
            scanf("%d",&b[i]);
        }
        int sum=0;
        for(int i=0;i<n;i++){
            sum+=a[i]+b[i];
        }
        if(sum<y){
            printf("No");
            return 0;
        }
        int c[sum/2+1]={};
        int i,j,k,l,m,n;
        for(i=0;i<=sum/2;i++){
            c[i]=i;
        }
        for(k=1;k<sum/2+1;k++){
            l=k;
            m=0;
            while(m<c[l]){
                m++;
                j=c[m]-k;
                if(j>y)break;
                k=j;
                m++;
            }
            if(l==m-1){
                c[k]=l;
            }else{
                int tmp=l;
                l=m-1;
                m=tmp;
            }
        }
        for(i=0;i<n;i++){
            if(a[i]+b[i]!=c[y-a[i]-b[i]]){
                printf("No");
                return 0;
            }
        }
        printf("Yes");
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真