假期训练六(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暑期集训队的 ...
随机推荐
- springmvc整合mybatis 配置文件
使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...
- 关于vs2010开发的ASP项目部署到XPSP2系统上出现找不到Reportviewer.XX.文件的解决方案
尝试方法如下: 1.将webform.dll.winform.dll.common.dll三个引用直接复制到服务器的Bin目录,未解决问题,提示无法正确加载,程序及已关闭等. 2.SQLSysClrT ...
- vue-app项目,将px自动转化为rem
1. 安装lib-flexible: npm install --save lib-flexible 2.安装postcss-loader和postcss-px2rem: npm install -- ...
- c++ sizeof,strlen, length
#include <map>#include <iostream>#include <algorithm>#include <functional>#i ...
- Python中操作SQLAlchemy
一.ORM 框架简介 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法 ...
- Incorrect Invoice Ref.
IF_EX_ACC_DOCUMENT~CHANGE LOOP AT c_accit ASSIGNING <wa_accit> WHERE rebzg eq 'V'. <wa_acci ...
- tar.gz和.rpm包的区别与使用(转)
一.Linux软件的二进制分发 Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它 ...
- ubuntu下安装php
一.下载PHP7的最新版源码 php7.0.9 下载地址 http://php.net/get/php-7.0.9.tar.gz/from/a/mirror 二.解压 tar -zxf /tmp/ph ...
- C#读取Excel表中的数据时混合字段部分数据没有
解决同一列中“字符串”和“数字”两种格式同时存在,读取时,不能正确显示“字符串”格式的问题:set xlsconn=CreateObject("ADODB.Connection") ...
- Vue v-if 和 v-show
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...