AHOI1997彩旗飘飘 VIJOS1097合并果子(noip2007)
这是一题类似于排列组合的题目吧...递推状态
数组f[100][100][100][2];表示红旗数目,黄旗数目,颜色改变的次数,末尾的旗的颜色(0为黄,1为红)
之后就是如何写递推式了:
for(int k=2;k<=m;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
for(int l=1;l<=i;l++){
f[i][j][k][0]+=f[i-l][j][k-1][1];
}
for(int l=1;l<=j;l++){
f[i][j][k][1]+=f[i][j-l][k-1][0];
}
}
就拿循环中的for(int l=1;l<=i;l++)这个循环说说我自己的想法吧
因为是从上一个状态推下来的,k-1这个应该没有问题,那为什么以黄旗结尾的是加上k-1时以红旗结尾的呢?
其实这个也很好理解...改变k-1次时,以红旗结尾,改变k次时,当然是以黄旗结尾的了
i-l是啥?枚举状态啊....这个需要feel
附上完整代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,m;
int f[100][100][100][2];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
f[i][j][1][0]=f[i][j][1][1]=1;
}
for(int k=2;k<=m;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
for(int l=1;l<=i;l++){
f[i][j][k][0]+=f[i-l][j][k-1][1];
}
for(int l=1;l<=j;l++){
f[i][j][k][1]+=f[i][j-l][k-1][0];
}
}
cout<<f[n][n][m][1]+f[n][n][m][0];
return 0;
}
这一题和合并石子有点像,但是不可混为一谈...题目的要求是有所不同的,要注意审题
说说这一题吧...这一题也是有很多解法的
因为之前没有打过优先队列,所以这里算是学习了一下吧
首先是头文件#include<queue>
priority_queue<int> qi;//普通的优先级队列,按从大到小排序(默认)
priority_queue<int, vector<int>, greater<int> > qi2;//从小到大的优先级队列
//可将greater改为less,即为从大到小
然后调用起来和queue的操作没有什么区别
但是注意一下q.top和q.front的使用吧,front不一定是最优先的
再套上这一题的思路:
每次选最小的两个数拿出来,加和后再加入队列里,排序。
这个思路有点类似于贪心思想...很容易证明
因为每次合并都是把之前合并的加上现在的某一堆,所以之前合并的果子越小越优
附上代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int, vector<int>, greater<int> >q;
int n,x,y;
long long ans=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
q.push(x);
}
while(!q.empty()){
x=q.top();
q.pop();
if(q.empty()) break;
y=q.top();
q.pop();
q.push(x+y);
ans+=(x+y);
}
cout<<ans;
return 0;
}
晚安....
AHOI1997彩旗飘飘 VIJOS1097合并果子(noip2007)的更多相关文章
- 【noip 2004】 合并果子
noip2016结束后的第一份代码--优先队列的练习 合并果子 原题在这里 #include <iostream> #include <queue> #include < ...
- 合并果子 2004年NOIP全国联赛普及组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆 ...
- NOIP2004合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- codevs 1063 合并果子//优先队列
1063 合并果子 2004年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 题目描述 Description 在一个果园里,多多已经将所有的果 ...
- [KOJ6024]合并果子·改(强化版)
[COJ6024]合并果子·改(强化版) 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多把这些果子堆排成一排,然后所有的果子合成一堆. 每一次合并 ...
- [KOJ6023]合并果子·改
[COJ6023]合并果子·改 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多把这些果子堆排成一排,然后所有的果子合成一堆. 每一次合并,多多可以 ...
- [KOJ0574NOIP200406合并果子]
[COJ0574NOIP200406合并果子] 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两 ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- 【NOIP合并果子】uva 10954 add all【贪心】——yhx
Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...
随机推荐
- 升级_宽视野Oracle图形升级(升级后dbca建库)—10.2.0.1.0提拔10.2.0.5.0
***********************************************声明********************************************** 原创作 ...
- POJ 1066 Treasure Hunt(相交线段&&更改)
Treasure Hunt 大意:在一个矩形区域内.有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越仅仅能在中点穿越. 思路:须要巧妙的转换一 ...
- NYNU_省赛选拔题(10)
题目描述 Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recog ...
- 微信公众平台企业号验证接口、回调 PHP版
微信公众平台企业号验证接口.回调 PHP版,本人为了解决这个企业号的验证和发送消息的问题,整整研究了几天时间,由于微信企业号刚推出来,网上资料太少了!后来在一些朋友的帮助下和本人重复调试完好下,最终整 ...
- 使用SharePoint创建和定义自己的网站页面
使用SharePoint创建和定义自己的网站页面 1. 打开SharePoint Designer 2010. 2. 点击网站页面导航. 3. 在功能区点击Web部件页面,新建Employee.axp ...
- 备份IIS httpd.ini 重写规则,兼容大部分版本号IISserver
IISserver已经非常少,差点儿要退出市场了.nginx成为市场的主流. 备份一个httpd.ini,全部内容例如以下: [ISAPI_Rewrite] # 3600 = 1 hour Cache ...
- 退出手机QQ依旧显示在线
老婆说明明看到你手机QQ在线,怎么发信息不回复?这让我非常是冤枉,我明明退出了啊! 晚上宝宝睡觉后,我们一起来研究,发现了当中的秘密,原来仅仅要选择了"退出后仍接受消息通知"这个选 ...
- UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...
- 且看三星刚发布的Smart TV如何窃听你的枕边细语
三星最新的SmartTV有一个很酷的新的声控功能,网络连接设备可以通过它来录下你说过的所有内容并把它上传到一个第三方的地方进行存储. 该公司的语音识别软件允许用户跟他们的电视通过声音来进行沟通.一旦电 ...
- centos6的安装,一步一图,有图有真相
打开虚拟机VMware,点击文件,选择[新建虚拟机],如图所示