Hihocoder [Offer收割]编程练习赛70 解题报告 By cellur925
2018-07-29 19:44
633 查看
并没有第四题。(还不会矩阵乘法加速线性数列)
题目1 : 数位翻转
时间限制:20000ms 单点时限:1000ms 内存限制:256MB描述
给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 1,1 变成 0
现在小 Hi 想知道,至少需要多少次操作,才能将 n 变成 n-1
输入
一个正整数 n
1 ≤ n ≤ 109
输出
输出最少的操作次数
签到题,模拟一下取出各位二进制数即可,极水,怒A。
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; int n; ll ans; int a[30]; bool flag[30]; void dfs(int cnt,int a1,int a2,int pre) {//cnt->当前已经选到第几个三角形 //a1->三角形中最短边,a2->三角形中最长边。 //pre->上一个选到哪了(下标) if(cnt==ans+1) { printf("%d",ans); exit(0);//void函数中想直接return 0结束程序用exit } if(!a1) { for(int i=pre+1;i<=n;i++) { if(flag[i]) continue; flag[i]=1; dfs(cnt,a[i],0,i); flag[i]=0; } } else if(a1>0&&a2<=0) { for(int i=pre+1;i<=n;i++) { if(flag[i]) continue; flag[i]=1; dfs(cnt,a1,a[i],i); flag[i]=0; } } else { for(int i=pre+1;i<=n;i++) { if(flag[i]) continue; if(a1+a2<=a[i]) return ; flag[i]=1; dfs(cnt+1,0,0,0); flag[i]=0; } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=n/3;i>=0;i--) { ans=i;//要几个 当前在哪 现在已经有几个边 dfs(1,0,0,0); } printf("%d",ans); return 0; }View Code
相关文章推荐
- 【hihocoder [Offer收割]编程练习赛9 C】【简单DP】三等分
- 【hihocoder】#1566 : 皇室成员的名字[Offer收割]编程练习赛25
- [Offer收割]编程练习赛13 hihocoder 1504 (矩阵快速幂)
- 【hihocoder [Offer收割]编程练习赛9 D】【简单DP】矩阵填数
- [Offer收割]编程练习赛1 hihocoder 1271 舰队游戏 (状态压缩+贪心 好题)
- hihocoder[Offer收割]编程练习赛49 题解
- [Offer收割]编程练习赛2 hihocoder 1275 扫地机器人 (计算几何+模拟 比较烦)
- HiHoCoder [Offer收割]编程练习赛6 C. 图像算子(高斯消元小数版)
- hihoCoder [Offer收割]编程练习赛8 小Ho的强迫症 (裴蜀定理)
- HihoCoder1652 : 三角形面积和2([Offer收割]编程练习赛38)(几何)(不会几何,占位)
- [hihocoder][Offer收割]编程练习赛44
- 漏写的数字 hihoCoder[Offer收割]编程练习赛38/hihoCoder1649
- hihocoder[Offer收割]编程练习赛6及参考
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
- hihocoder offer收割编程练习赛12 B 一面砖墙
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
- hihocoder [Offer收割]编程练习赛24
- hihocoder 1569 [Offer收割]编程练习赛25 : 无限巧克力谜题
- hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物
- HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)