假期训练六(poj-1753,递归+hdu-2844,多重背包)
题目一:传送门
题意:有一个4*4的棋盘,每次翻转一个棋子和它的上下左右的四个棋子,判断翻转多少次之后可以变为纯色的棋盘。
思路:总共有C(0,16)+C(1,16)+C(2,16)+……+C(16,16)=2^16次,所以最多有16个棋子被翻动,然后从(0,0)个棋子开始,依次翻转其他棋子,
判断最少要翻转多少个棋子,记着要回溯。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF = ;
char str[][];
int a[][],mi,zz[][]={,, ,, ,-, ,, -,};
void turn(int x,int y)
{
for(int i=;i<;i++)
{
int x1=x+zz[i][];
int y1=y+zz[i][];
if(x1>=&&x1<&&y1>=&&y1<)
{
a[x1][y1]=!a[x1][y1];
}
}
}
bool pd()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
if(a[][]!=a[i][j]) return false;
}
return true;
}
void dfs(int x,int y,int num)
{
if(pd())
{
mi=mi>num?num:mi;
return ;
}
if(x==) return ;
turn(x,y);
if(y==) dfs(x+,,num+);
else dfs(x,y+,num+);
turn(x,y);
if(y==) dfs(x+,,num);
else dfs(x,y+,num);
}
int main(void)
{
int i,j,n,m;
for(i=;i<;i++) scanf("%s",str[i]);
for(i=;i<;i++)
{
for(j=;j<;j++)
a[i][j]=str[i][j]=='b'?:;
}
mi=INF;
dfs(,,);
if(mi<=) printf("%d\n",mi);
else printf("Impossible\n");
return ;
}
题目二:传送门
题意:有n个种硬币,最大不超过m,给出每种硬币的价值和数量,求不超过m的情况下能组成多少种价格。
思路:多重背包;
(注意:当时因为审题不清,没理解多少种价格的意思,其实就是dp[i]==i的情况)。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = ;
int val[maxn],num[maxn],dp[maxn],a[maxn*];
int MAX(int x,int y)
{
return x>y?x:y;
}
int main(void)
{
int n,m,i,j,pt,cnt;
while(scanf("%d%d",&n,&m)&&(n+m))
{
memset(dp,,sizeof(dp));
memset(a,,sizeof(a));
for(i=;i<=n;i++) scanf("%d",&val[i]);
for(pt=,i=;i<=n;i++)
{
scanf("%d",&cnt);
for(j=;j<=cnt;j*=)
{
a[pt++]=j*val[i];
cnt-=j;
}
if(cnt>) a[pt++]=cnt*val[i];
}
for(i=;i<pt;i++)
{
for(j=m;j>=a[i];j--)
dp[j]=MAX(dp[j],dp[j-a[i]]+a[i]);
}
int ans=;
for(i=;i<=m;i++)
if(i==dp[i]) ans++;
printf("%d\n",ans);
}
return ;
}
假期训练六(poj-1753,递归+hdu-2844,多重背包)的更多相关文章
- hdu 2844 多重背包coins
http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意: 有n个硬币,知道其价值A1.....An.数量C1...Cn.问在1到m价值之间,最多能组成多少种 ...
- hdu 2844 多重背包+单调队列优化
思路:把价值看做体积,而价值的大小还是其本身,那么只需判断1-m中的每个状态最大是否为自己,是就+1: #include<iostream> #include<algorithm&g ...
- Coins(hdu 2844 多重背包)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2844 多重背包二进制优化
//http://www.cnblogs.com/devil-91/archive/2012/05/16/2502710.html #include<stdio.h> #define N ...
- hdu 2844 多重背包的转化问题 以及这个dp状态的确定
在杭电上测试了下 这里的状态转移方程有两个.,. 现在有价值val[1],val[2],…val[n]的n种硬币, 它们的数量分别为num[i]个. 然后给你一个m, 问你区间[1,m]内的所有数目, ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- POJ 2392 Space Elevator(贪心+多重背包)
POJ 2392 Space Elevator(贪心+多重背包) http://poj.org/problem?id=2392 题意: 题意:给定n种积木.每种积木都有一个高度h[i],一个数量num ...
- POJ 3260 The Fewest Coins(多重背包+全然背包)
POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...
- hdu 2844 混合背包【背包dp】
http://acm.hdu.edu.cn/showproblem.php?pid=2844 题意:有n种纸币面额(a1,a2,...an),每种面额对应有(c1,c2,...cn)张.问这些钱能拼成 ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
随机推荐
- PHP抽象方法、抽象类以及接口
1.什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时 ...
- bootstrap-table 使用遇到的问题总结
问题一:右上角button样式自定义 方法: //修改bootstrap-table右上角按钮样式 $(".table-box .columns-right button").re ...
- 宋体freetype16和12号字无法正常显示
在使用freetype过程中发现,从window下拷贝来的simsun.ttc, simkai.ttf两个字体, 在调用 FT_Set_Pixel_Sizes(face, 12, 0): 将字体大小设 ...
- Mysql自定义函数functions时报错
delimiter && [函数创建语句.....] [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or ...
- 有关https有的网站可以访问有的访问不了的问题
在开发中遇到这种情况,在开发工具里面访问可以,当时到了手机上之后就发现有的请求可以正常获取数据,有的则不行. 都是使用https地址,也配置后台了,但是就是不出数据,总是无法请求服务. 后来检查在手机 ...
- rosrun和roslaunch
rosrun allows you to run an executable(可执行) in an arbitrary(任意) package without having to cd (or ros ...
- [Z]Spring Data JPA 之 一对一,一对多,多对多 关系映射
一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这 ...
- CSS 图片居中
} .left-logo a { height: 100px; width: 55px; display: block; } .left-logo a img{ height: ; width: 55 ...
- c# usercontrol ,networkcomms3.0 Invoke总结
1: accordionControl 添加了自定义控件页面 之后,切换到别的页面后,原先打开的页面对象还是存在的没有被销毁,再打开时重新引用即可 private void accordionCont ...
- std::move 移动对象资源
场景: C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了. ...