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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

nyoj 229

發(fā)布時(shí)間:2025/3/16 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj 229 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://acm.nyist.net/JudgeOnline/problem.php?pid=229

#include<iostream> #include<cstdio> #include<cstring>using namespace std;const int MAXN = 110;int Ap[MAXN]; int Bp[MAXN]; int dp[MAXN];//dp[i]表示完成i個(gè)工作A,之后還能完成多少個(gè)工作B int n,m;int MAX(int a, int b) {return a > b ? a : b; }int slove( int mid ) {int i,j,k;memset(dp, -1, sizeof(dp));for(i = 0; i <= m; ++i)//第一個(gè)人完成i個(gè)A,還可以完成多少個(gè)Bif(mid >= i*Ap[1])dp[i] = (mid-i*Ap[1])/Bp[1];elsebreak;if(dp[m] >= m)//如果第一個(gè)人完成A之后,還有足夠的時(shí)間來完成B,那么就說明這個(gè)mid時(shí)間是可以的return 1;//如果剩下的時(shí)間不足以完成B,或者給定mid的時(shí)間完不成A, 剩下的就是背包思想for(i = 2; i <= n; ++i){//既然第一個(gè)人不能在給定的mid時(shí)間內(nèi)完成兩個(gè)任務(wù),那么接下來在讓其他人上,看前i是否可以完成任務(wù)for(j = m; j >= 0; --j){for(k = 0; k <= j && k*Ap[i] <= mid; ++k){//如果第i個(gè)人可以完成k份工作A,并且前i-1個(gè)人已完成了j-k個(gè)工作A,(即是否可以留更多的時(shí)間來做更多的工作)那么前i個(gè)工人還可以完成多少份工作?if(dp[j-k] != -1)dp[j] = MAX(dp[j], dp[j-k]+(mid-k*Ap[i])/Bp[i]);}}if(dp[m] >= m)//如果前i(包括i)個(gè)工人完成A之后還能完成B,那么返回1,說明mid滿足return 1;}return 0; }int main() {int i,T;scanf("%d", &T);while(T--){int maxtime = 0;scanf("%d%d",&n,&m);for(i = 1; i <= n; ++i){scanf("%d%d",&Ap[i],&Bp[i]);maxtime = MAX(maxtime, MAX(Ap[i], Bp[i]));}int L = 0,R = (maxtime*m) << 1;while(L < R){int mid = (L + R)>>1;if(slove(mid))//如果給定的mid時(shí)間一直都滿足,那么繼續(xù)收縮區(qū)間,直到找到一個(gè)最小的時(shí)間R = mid;elseL = mid + 1;}printf("%d\n",L);}return 0; }

總結(jié)

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

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