2016HUAS_ACM暑假集训4K - 基础DP
我不知道怎么用DP,不过DFS挺好用。DFS思路很明显,搜索、记录,如果刚好找到总价值的一半就说明搜索成功。
题目大意:每组6个数,分别表示价值1到6的物品个数。现在问你能不能根据价值均分。
Sample Input //6种价值物品的个数,全为0时结束
1 0 1 2 0 0
1 0 0 0 1 1
0 0 0 0 0 0
Sample Output //注意格式,空两行
Collection #1:Can't be divided.
Collection #2:Can be divided.
#include<iostream>
using namespace std; int N[];//存数量
int Sum,T=,i;
bool flag;//标记 void dfs(int s,int p)
{
if(s==Sum/)//找到了价值刚好为一半
{
flag=true;
return;
}
for(int i=p;i>=;i--)//搜索,似乎和DP有点像啊
{
if(N[i])
{
if(s+i<=Sum/)
{
N[i]--;
dfs(s+i,i);
if(flag)
break;
}
}
}
return;
} int main()
{
while()
{
Sum=;
for(i=;i<=;i++)
{
cin>>N[i];
Sum+=i*N[i];//算出价值总和
}
if(!Sum)//全0
break;
if(Sum%)//总价值为奇数时不成立,剪枝
{
cout<<"Collection #"<<T<<":\nCan't be divided.\n\n";
T++;
continue;
} flag=false; dfs(,); if(flag)
{
cout<<"Collection #"<<T<<":\nCan be divided.\n\n";
T++;
continue;
}
else
{
cout<<"Collection #"<<T<<":\nCan't be divided.\n\n";
T++;
continue;
}
}
return ;
}
2016HUAS_ACM暑假集训4K - 基础DP的更多相关文章
- 2016HUAS_ACM暑假集训4M - 基础DP
简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1 //测试组数T 5 10 ...
- 2016HUAS_ACM暑假集训4A - 递推
利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...
- 2016HUAS_ACM暑假集训4D - 计数,排列
一个错排公式的基础应用. 大致题意:求n个数的错误排列方式.(每个都要错) 在这里先贴一下错排公式:D(1)=0:D(2)=1:D(n)=(n-1)*(D(n-1)+D(n-2)) 它的推导也非常有意 ...
- 暑假集训 || 状压DP
emm 位操作实现技巧: 获得第i位的数据: if(!(data & (1<< i))) 则data的第 i 位为0,else 为 1 设置第i位为1,data=(data | ...
- 2016HUAS_ACM暑假集训4C - 递推
题目大意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形. 这里我们可以这样看: 对于行:假如是m单位长度,则长度为1的矩形有m个,长度为2的矩形有m-1个......长度为m的只有1 ...
- 2016HUAS_ACM暑假集训4F - 数论
这个题目,如果没找到方向,确实有点一头雾水.但是如果你找对方向了,AC是分分钟的事.答案就是看n和m是否有除1之外的公约数. 简单证明:设n和m最大公约数不是1,假设为p.n和m总可以化为一个数乘以k ...
- 2016HUAS_ACM暑假集训4B - 递推
这种数学推理题目题意极其明显,在做的时候,可以多写几组,这样找起规律来会容易些.概括起来就是:题意简单暴力,案例毫无价值. 一个三角形最多可以把一个平面分成两部分,两个三角形最多是8(2+6)部分,而 ...
- 2016HUAS_ACM暑假集训3G - 还是畅通工程
最小生成树,题目简单.套的Prim模板,其他的题目比较有意义. Sample Input 3 //村庄个数1 2 1 ...
- 2016HUAS_ACM暑假集训3F - Jungle Roads
这个题目属于最小生成树问题,可以用Prim,也可以用Kruskal(还没试).题意简单直接,给你一个图,求出它最小生成树的权值. 题目最有趣的地方就是图的顶点是字母,稍微处理一下就好了. Sample ...
随机推荐
- linux 两个文件合并
可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...
- JavaScript数据类型
当说到JavaScript的数据类型时,好多做了很多年web的朋友甚至还不太清楚.这应该算是最基础的js知识了.我觉得有必要在这记录一下,方便自己和大家查看. 最基本的,js有五种数据类型:undef ...
- C# 判断文件有没占用
C# 判断文件有没占用 using System; using System.Collections.Generic; using System.Text; using System.Runtime. ...
- When you install printer in Ubuntu, just need a ppd file.
Search printing in the system and add printer. Then import ppd file. That is all.
- unity5.0材质添加问题
将Material拖放到Cube的Inspector视图中 材质添加图片背景,unity自带了很多种材质类型点击Shader下拉按钮可以更换材质类型为Diffuse camera preview: G ...
- 北大poj- 1045
Bode Plot Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14060 Accepted: 8820 Descri ...
- mozilla firefox 安装flash player
下载 flash player http://get.adobe.com/cn/flashplayer/ for linux .tar.gz文件 install_flash_player_11_li ...
- 【C】制作简单的时钟减法程序
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARGC_NUM 3 #def ...
- 关于项目中owl文件中的类定义和属性定义
<owl:Class rdf:about="www.isinonet.com/insider#XXX"> <rdfs:label>name</rdfs ...
- OC calendar 实践中的那些坑
博客已经迁移到www.chjsun.top 最近想做一个万年历似的东西,因为需要把农历也添加进去,就想直接调用苹果自带的api,这样还方便一些, 搜索了一下,苹果对于时间的处理,还是提供了很多选择给我 ...