日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LA3971组装电脑

發(fā)布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LA3971组装电脑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 你有b塊錢,想要組裝一臺電腦,給你提供一些零件,每種零件提供一個或幾個,組裝電腦的前提是每種零件只能也必須選擇一個,每種零件都有自己的種類,名字,價格,還有品質(zhì),要求是在能配成電腦的前提下所有零件中最小的品質(zhì)最大(品質(zhì)越大越好)。


思路:
? ? ? 最小的最大,第一反應(yīng)就是二分,這個題目也不例外,我們只要二分品質(zhì)就行了,品質(zhì)的數(shù)據(jù)感覺比較大,但是直接去枚舉應(yīng)該也能過,如果擔(dān)心過不了可以先把零件中所有涉及的品質(zhì)都拿出來,答案肯定是這些數(shù)據(jù)中的一個,我們只要sort下,然后去二分枚舉sort后的品質(zhì)數(shù)組,每次枚舉我們都會得到一個當(dāng)前的品質(zhì)值,對于每種物品,我們肯定是選擇品質(zhì)值滿足要求的最小花費的那個零件,其他的沒什么,細心點就行了,具體細節(jié)可以看代碼。
? ? ?
? ? ?
? ? ??


#include<map>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>


#define N 1000 + 10


using namespace std;


typedef struct
{
? ?int jg ,pz;
? ?char str[22];
}NODE;


NODE node[N];
map<string ,int>mark;
int tmp[N] ,P[N] ,nowidp;


bool camp(NODE a, NODE b)
{
? ? return a.jg < b.jg;
}


bool ok(int nowpz ,int n ,int szl ,int b)
{
? ? mark.clear();
? ? int sszl = 0 ,nowb = 0;
? ? for(int i = 1 ;i <= n ;i ++)
? ? {
? ? ? ? if(node[i].pz < nowpz) continue;
? ? ? ? if(!mark[node[i].str]) sszl ++ ,nowb += node[i].jg;
? ? ? ? mark[node[i].str] = 1;
? ? }
? ? return sszl == szl && nowb <= b;
}
? ? ? ??
? ? ? ?
? ?


int main ()
{
? ? int n ,b ,i ,szl ,t;
? ? char str[22];
? ? scanf("%d" ,&t);
? ? while(t--)
? ? {
? ? ? ? scanf("%d %d" ,&n ,&b);
? ? ? ? mark.clear();
? ? ? ? szl = 0;
? ? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? ? {
? ? ? ? ? ?scanf("%s %s %d %d" ,node[i].str ,str ,&node[i].jg ,&node[i].pz);
? ? ? ? ? ?if(!mark[node[i].str]) szl ++;
? ? ? ? ? ?mark[node[i].str] = 1;
? ? ? ? ? ?tmp[i] = node[i].pz;
? ? ? ? }
? ? ? ? sort(node + 1 ,node + n + 1 ,camp);
? ? ? ? sort(tmp + 1 ,tmp + n + 1);
? ? ? ? nowidp = 0;
? ? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? ? if(i == 1 || tmp[i] != tmp[i-1])
? ? ? ? P[++nowidp] = tmp[i];
? ? ? ??
? ? ? ? int low = 1 ,up = nowidp ,mid ,Ans = P[1];
? ? ? ? while(low <= up)
? ? ? ? {
? ? ? ? ? ?mid = (low + up) / 2;
? ? ? ? ? ?if(ok(P[mid] ,n ,szl ,b))
? ? ? ? ? ?{
? ? ? ? ? ? ? Ans = P[mid];
? ? ? ? ? ? ? low = mid + 1;
? ? ? ? ? ?}
? ? ? ? ? ?else up = mid - 1;
? ? ? ? }
? ? ? ? printf("%d\n" ,Ans);
? ? }
? ? return 0;
}
? ? ? ??
? ? ? ??
? ? ? ??
? ? ? ??
? ??
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的LA3971组装电脑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。