LightOJ 1180 Software Company(区间)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1180

题意:n个工人,两份任务A和B,每份任务被分成m份,不放A的一份为a,B的一份为b。给出每个人做a和b的时间。求干完A和B的最小时间。

思路:f[i][j]表示前i个人干A的j份最多可以干B多少分,二分答案。。。。好犀利啊。。

View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #define max(x,y) ((x)>(y)?(x):(y))
 5 using namespace std;
 6 
 7 int C,num=0;
 8 int a[105],b[105],dp[105],n,m;
 9 
10 int OK(int mid)
11 {
12     int i,j,k,t;
13     memset(dp,-1,sizeof(dp));
14     dp[0]=0;
15     for(i=1;i<=n;i++)
16     {
17         t=mid/a[i];
18         for(j=m;j>=0;j--) for(k=0;k<=t&&k<=j;k++) if(dp[j-k]!=-1)
19             dp[j]=max(dp[j],dp[j-k]+(mid-k*a[i])/b[i]);
20         if(dp[m]>=m) break;
21     }
22     return dp[m]>=m;
23 }
24 
25 int main()
26 {
27     for(scanf("%d",&C);C--;)
28     {
29         scanf("%d%d",&n,&m);
30         int i;
31         for(i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
32         int low=1;
33         int high=a[1]*m+b[1]*m;
34         int mid;
35         while(low<=high)
36         {
37             mid=(low+high)>>1;
38             if(OK(mid)) high=mid-1;
39             else low=mid+1;
40         }
41         printf("Case %d: ",++num);
42         if(high>=1&&OK(high)) printf("%d\n",high);
43         else printf("%d\n",low);
44     }
45     return 0;
46 }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sigma函数是指一个数字的所有因子之和。给定一个数字n,需要求出有多少个数字的Sigma函数是偶数。\[2\] 为了解决这个问题,可以先筛选出n范围内的素数(范围在10^6即可),然后对n进行素因子分解。对于每个因子,如果它的Sigma函数中连乘的每一项都是偶数,那么整个Sigma函数就是偶数。具体实现中,可以判断每个因子的平方根是否为偶数,如果是偶数,则减去(平方根+1)/2。\[1\] 另外,还可以使用O(1)的做法来解决这个问题。根据观察,所有的完全平方数及其两倍的值都会导致Sigma函数为偶数。因此,可以直接计算n的平方根,然后减去(平方根+1)/2即可得到结果。\[3\] #### 引用[.reference_title] - *1* [Sigma Function](https://blog.csdn.net/PNAN222/article/details/50938232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【LightOJ1336】Sigma Function(数论)](https://blog.csdn.net/qq_30974369/article/details/79009498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值