***POJ 3276【反转】
来源:互联网 发布:网络麻将群主违法吗 编辑:程序博客网 时间:2024/06/03 13:35
这里写链接内容
思路:转向的先后顺序不影响结果;同一头牛转向两次等同于没有转向。
AC代码:
#include <iostream>#include <algorithm> #include <cstdio>#include <cstdlib>#include <cstring>int n, dir[5000], f[5000], ans_m, ans_k;int reverse(int k){ //计算每次反转k头牛所需的最小反转次数 int res = 0, sum = 0; //res是返回值,即最小反转次数;sum为每头牛的反转次数 memset(f, 0, sizeof(f)); //sizeof(f)或4*n,不能写成n! for(int i = 0; i + k - 1 < n; i++){ if((dir[i] + sum)%2 != 0){ res++; sum++; f[i] = 1; } if(i + 1 - k >= 0) sum -= f[i + 1 - k]; } for(int i = n + 1 - k; i < n; i++){ if((dir[i] + sum)%2 != 0) return -1; if(i + 1 - k >= 0) sum -= f[i + 1 - k]; } return res;} int main() { scanf("%d", &n); for(int i = 0; i < n; i++){ char ch; getchar(); scanf("%c", &ch); if(ch == 'B') dir[i] = 1; else dir[i] = 0; } ans_m = n + 1; for(int i = 1; i <= n; i++){ int m = reverse(i); //每次反转i头牛 if(m >= 0 && m < ans_m){ ans_m = m; ans_k = i; } else if(m == ans_m && i < ans_k){ ans_k = i; } } printf("%d %d\n", ans_k, ans_m); return 0;}
1 0
- POJ 3276 反转问题
- poj 3276 开关反转
- ***POJ 3276【反转】
- POJ 3276 反转(开关问题)
- 开关问题--反转 poj 3276
- POJ 3276 牛的朝向 反转问题
- POJ 3276 尺取法 反转问题
- POJ 3276 Face The Right Way 反转
- POJ 3279 Fliptile(反转)
- POJ数字反转
- poj 3279 Fliptile 反转
- 【反转问题】POJ
- 【反转问题】POJ
- POJ 3276 反转开灯问题 每次选取连续k个反转方向 问多少次方向相同
- POJ 1504反转相加再反转
- poj 3276 反转开关问题(一) DP+模拟
- poj 3276--Face The Right Way(反转)
- poj 3276 Face the right way(反转)
- 剑指offer--二维数组中的查找
- CSMA/CD与CSMA/CA
- Android 活动之启动模式
- 关于html5新加的nav标签
- 通过bp寄存器查看调用栈关系
- ***POJ 3276【反转】
- LeetCode 121. Best Time to Buy and Sell Stock 题解 —— Java
- 初入CentOS的那些事
- 文件操作--File
- 一笔画问题
- spring boot-执行Async任务时,使用自定义的线程池
- HDU1045 Fire Net
- 事件委托
- LeetCode:203. Remove Linked List Elements