[CSP-S模拟测试]:装饰(数学)
题目传送门(内部题147)
输入格式
每个测试点第一行一个正整数$T$,表示该测试点内的数据组数。
接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示。
输出格式
对每组数据输出一行一个非负整数表示答案。
样例
样例输入:
5
1 2 3
5 0 0
9 1 1
5 5 4
0 6 6
样例输出:
2
0
2
4
4
数据范围与提示
样例解释:
第一组数据中,可以装饰出红黄蓝、黄蓝蓝两张桌子;
第二组数据中只有红色的气球,无法装饰任何桌子;
第三组数据中,只能装饰两张桌子,颜色分别为红红黄和红红蓝,而剩下的$5$个红色气球无法使用。
第四组数据中,可以装饰四张颜色为红黄蓝的桌子,剩余的一个红色气球和一个蓝色气球无法使用。
最后一组数据中,可以装饰黄蓝蓝和黄黄蓝的桌子各两张。
数据范围:
对于$30\%$的数据,有$a,b,c\leqslant 5$,
对于$60\%$的数据,有$a,b,c,T\leqslant 500$,
对于$100\%$的数据,有$0\leqslant a,b,c\leqslant 1000000000$(即$1000^3$),$1\leqslant T\leqslant 20,000$。
题解
先说一下$60\%$的暴力吧。
设$dp[i][j][k]$表示红色有$i$个,黄色有$j$个,蓝色有$k$个的情况下最多能装饰几个桌子。
有转移:
$$dp[i][j][k]=\max(dp[i-1][j-1][k-1],dp[i-2][j-1][k],dp[i-1][j-2][k],dp[i-2][j][k-1],dp[i-1][j][k-2],dp[i][j-2][k-1],dp[i][j-1][k-2])$$
注意空间问题(不然会$MLE0$,比方说某同桌),但是因为答案很小,所以用$short$就好啦。
正解其实是找规律找出来的,无意间发现当数量最少的两个球相加乘$2$还比另一个球少的情况下答案就是这两个球的加和;否则答案就是三个球数量加和的$\frac{1}{3}$。
时间复杂度:$\Theta(T)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
long long a[3];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld",&a[0],&a[1],&a[2]);sort(a,a+3);
printf("%lld\n",(a[0]+a[1])*2<a[2]?a[0]+a[1]:(a[0]+a[1]+a[2])/3);
}
return 0;
}
rp++
最新文章
- iOS CLLocationManager 定位
- memcpy code
- CSS居中完全解决方案
- FFT(1)
- ASP.NET MVC4中用 BundleCollection使用问题手记
- 如何过滤 adb logcat 输出
- hdoj 2647 Reward【反向拓扑排序】
- win7 snmp
- 上mongodb创建一些吸取的经验教训指数
- git底层原理(二)
- Mac系统实现git命令自动补全
- lua 操作数据库
- css文本样式-css学习之旅(4)
- [Codeforces394B]Very Beautiful Number(逆推)
- hash 位运算 练习
- hdu 6069 Counting Divisors(求因子的个数)
- Android控件第7类——对话框
- fresco xml配置属性不起作用
- 在Vue中关闭Eslint 的方法
- 看到的一个关于C++能力分级的描述
热门文章
- CentOS/RHEL 安装EPEL第三方软件源
- MVC4学习要点记四
- springboot-oracle工程win下正常,centos下不能访问数据库
- 【异常】Caused by: org.apache.phoenix.coprocessor.HashJoinCacheNotFoundException:
- 招商银行网银在Mac上装了插件仍然无法登录
- Vivotek 摄像头远程栈溢出漏洞分析及利用
- websocket 多聊天室功能
- YII2-按需加载并管理静态资源(CSS,JS)
- sql 脚本过大
- QTP(1)