博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj---3276Face The Right Way
阅读量:5036 次
发布时间:2019-06-12

本文共 1332 字,大约阅读时间需要 4 分钟。

题意:

  给一个01串,一次操作可以翻转连续的K的值,求最小的操作次数m及其对应的k值

  

tips:

  1.考虑第i头牛来分析,它的状态跟谁和什么操作有关。

  2.分析题目性质,找到问题求解的步骤,在求解中减小问题的规模。----题目问题肯定有解决流程。

  3.递推的思想

  4.看网上的题解还是鞥启发思路的,书和blog各有其好,结合食用效果最佳。

  5.白书上的递推公式有点坑啊。。

  6.代码中sum保存当前位置的前k-1格的操作数

//先要对问题进行分析,找出求解问题的思路//将问题的规模逐渐缩小,横推过去//区间的影响范围和 递推公式的理解//只记录操作的次数,跟线段树的懒标记有点像//卡在输入了..然而并不是,是中间有个循环i的赋值错了//网上的题解对输入的处理是定义了一个字符数组,%s输入,最后只用判断第一位//用getchar(),把回车字符过滤了也可以//sum的解释https://blog.csdn.net/thudaliangrx/article/details/50444975#include
#include
#include
using namespace std;const int MAXN=5001;int dir[MAXN];int f[MAXN];int n;int clc(int K){ memset(f,0,sizeof(f)); int res=0; int sum=0; for(int i=0;i+K<=n;i++){ if(( dir[i]+ sum ) %2 != 0){ res++; f[i]=1; } sum+=f[i]; if(i-K+1 >= 0) { sum-=f[i-K+1]; } } //数组下标是从0开始的,所以第n个元素对应的下标是n-1 for(int i=n-K+1;i
= 0){ sum-=f[i-K+1]; } } return res;}int main(){ while(scanf("%d",&n)!=EOF){ getchar(); for(int i=0;i
= 0 && M>m){ M=m; K=k; } } printf("%d %d\n",K,M); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/SUMaywlx/p/9690740.html

你可能感兴趣的文章
android通知栏Notification点击,取消,清除响应事件
查看>>
php文件操作函数feof函数使用方法
查看>>
Nginx详解-服务器集群
查看>>
Mastache.js学习笔记(转自小花喵)
查看>>
论文记录
查看>>
[Keil51]51单片机定时器的方式0使用注意
查看>>
论电子病历文本编辑器
查看>>
oracle 建表时显示ORA-00984: 列在此处不允许
查看>>
Python操作MySQL
查看>>
Codeforces Round #506 (Div. 3) D. Concatenated Multiples
查看>>
iOS中的UIView的基本属性
查看>>
使用github
查看>>
在Win10下,python3和python2同时安装并解决pip共存问题
查看>>
四十六、android中的Bitmap
查看>>
eclipse运行maven的jetty插件内存溢出
查看>>
git常用命令
查看>>
Activiti动态设置办理人扩展
查看>>
c语言中宏定义只有宏名是怎么一回事
查看>>
在ASP.NET Core 2.0 web项目中使用EntityFrameworkCore
查看>>
xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式
查看>>