此题乍一看是普通背包,但由于物品价值不是固定的,而是随时间(重量)而改变。因此,采取不同顺序选取一组相同物品可能产生不同价值。这种问题属于泛化背包问题,要想解决,就需要固定顺序,然后使用背包。其实找到顺序并不难,只要根据贪心策略中的相邻项交换法即可得出,若要求x在y前面,就要求c[x]b[y]b[x]还要注意:由于物品价值可以为负数,故不能简单地将dp[T]当成最终答案因此可以如下实现:structThing{ llonga,b,c; inlinebooloperator=a[i].c;j--){ dp[j]=max(dp[j],dp[j-a[i].c]+(a[i].a-j*a[i].b));
签到题,模拟即可,注意除法不是整除。贪心intres=0;while(n>x){n/=2;res++;}while(n>0){n-=x;res++;}这题没看清楚,以为取余也要从数组中选择。实际上这是没必要的,只要在全体>1的自然数集合中取值即可。这样的话问题就简单了,可以直接mod2,但实际上这样还不对,比如51015200这样的数据就可以直接mod5。参考思路:如果数组中所有数互质且至少存在一个>=2的数,则直接先mod2再把所有还剩1的数都-1,共2次操作;否则,可以mod所有数的gcd,只需1次操作;否则,若只存在0,则只需0次操作;否则(即只存在0和1),只需1次操作。 inta,n
A:带宽:计算200Mbps=?MB/s。常识题,答案200/8=25先打一个素数表,然后遍历即可。答案1903boolcheck(intn):while(m>0){ inti=m%10; if(i!=2&&i!=3&&i!=5&&i!=7) return0; m/=10;}return1;intmain():intn=20210605,res=0;intk=init(n);for(inti=0;i暴力即可。可以写一个简单的日期类。答案977boolcheck(Dated){strings=d.toString();intx=0;for(charc:s)x+=c-'0';inty=(int)
此题乍一看是普通背包,但由于物品价值不是固定的,而是随时间(重量)而改变。因此,采取不同顺序选取一组相同物品可能产生不同价值。这种问题属于泛化背包问题,要想解决,就需要固定顺序,然后使用背包。其实找到顺序并不难,只要根据贪心策略中的相邻项交换法即可得出,若要求x在y前面,就要求c[x]b[y]b[x]还要注意:由于物品价值可以为负数,故不能简单地将dp[T]当成最终答案因此可以如下实现:structThing{ llonga,b,c; inlinebooloperator=a[i].c;j--){ dp[j]=max(dp[j],dp[j-a[i].c]+(a[i].a-j*a[i].b));
签到题,模拟即可,注意除法不是整除。贪心intres=0;while(n>x){n/=2;res++;}while(n>0){n-=x;res++;}这题没看清楚,以为取余也要从数组中选择。实际上这是没必要的,只要在全体>1的自然数集合中取值即可。这样的话问题就简单了,可以直接mod2,但实际上这样还不对,比如51015200这样的数据就可以直接mod5。参考思路:如果数组中所有数互质且至少存在一个>=2的数,则直接先mod2再把所有还剩1的数都-1,共2次操作;否则,可以mod所有数的gcd,只需1次操作;否则,若只存在0,则只需0次操作;否则(即只存在0和1),只需1次操作。 inta,n
A:带宽:计算200Mbps=?MB/s。常识题,答案200/8=25先打一个素数表,然后遍历即可。答案1903boolcheck(intn):while(m>0){ inti=m%10; if(i!=2&&i!=3&&i!=5&&i!=7) return0; m/=10;}return1;intmain():intn=20210605,res=0;intk=init(n);for(inti=0;i暴力即可。可以写一个简单的日期类。答案977boolcheck(Dated){strings=d.toString();intx=0;for(charc:s)x+=c-'0';inty=(int)