原创 zoj 3211 砍樹 有順序的dp

zoj 3211 有n棵樹,m天,每天只能砍一棵樹,每棵樹的初始價值爲ai,每過一天價值增長bi,求m天砍樹得到的最大價值。 開始貪心不可以,n棵樹長m天好像可以分成n*m棵樹再分組揹包(一棵樹只能砍一次)(裝酒問題),dp[i][j]=

原创 hdu 2089 不要62和4

首先明確數字只有兩類——有不吉利的和沒有不吉利的 還是把數字分成三類,1、不含有不吉利;2、不含有不吉利以2開頭;3、含有不吉利 這道題除了不要62兩個組合之外又加了不能有4的情況,接2和接9寫起來有些不同,9的話循環的i位不能填9,而就

原创 uva 11396 爪分解,判斷所給圖是否能分解成爪,二分圖判斷

爪是一個點連三條邊,若滿足條件,點的個數滿足n*2=m*3,中心點是一個集合,三條邊連的點是一個集合,是二分圖 #include <cstdio> #include <algorithm> #include <vector> #inclu

原创 uva 11258 String Partition

uva 11258 把給的字符串拆成32位有符號整形範圍內的整數,(1<<30)-1,使它們的和最大,和可以超過int範圍 先把全部可能用到的家數都枚舉出來,得到sum[i][j],其中爲str[i]到str[j] 構成的數字,再對每個數

原创 zoj 動態規劃分類

動態規劃  解 #1100 經典,狀態壓縮 DP,要先枚舉出行全部可能的狀態,DP[i][j] 表示 i 層,j 末狀態,dp[i][st[j][1]]+=dp[i-1][st[j][0]]; #1425 交叉線匹配,經典 DP,n^3

原创 uva 11795 洛克人打機器人 加法原理

#include<stdio.h> #include<string.h> #define N 1<<18 long long dp[N],st[N],w[N]; int main() { int i,j,k,l,m,n; scanf(

原创 浙江13省賽B 拼湊砝碼

題目 Break Standard Weight Time Limit: 2 Seconds      Memory Limit: 65536 KB The balance was the first mass measuring

原创 uva 10313 整數拆分——硬幣湊價

pay the price http://www.cnblogs.com/staginner/archive/2011/11/30/2269491.html 給你一個價格n,求在指定使用的硬幣個數範圍內付款的方案數,後面可能給你邊界a,b

原创 uva 10118 免費糖果 深搜+記憶化搜索

uva 10118 http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html #include<stdio.h> #include<string.h> #define

原创 uva 10130 超市減價全家買東西

uva 10130 01揹包,給你n種物品,m個人,給每個人能承受的最大重量,求可以最多買到的價值是多少 不知道There is a SuperSale in a SuperHiperMarket. Every person can ta

原创 hdu 3127 二維完全揹包,長方形布料剪裁求最大價值

想法很直接有效#include<iostream> #include<algorithm> #include<cstdio> #include<string.h> using namespace std;

原创 uva 10285 記憶化搜索

uva 10285 求矩陣中最長遞減路徑的長度,記憶化搜索,因爲要找的路徑是嚴格遞減的,所以不會有回頭路 Sample Input 2 Feldberg 10 5 56 14 51 58 88 26 94 24 39 41 24 16 8

原创 uva 11404 LCS打印字典序最小路徑

#include<stdio.h> #include<iostream> #include<string.h> #include<string> #define N 1020 using namespace std; int dp[N][

原创 uva 10827 求和最大可延伸的子矩形

uva 10827 Maximum sum on a torus 爲了算可延伸的矩形,要在原矩形的右面、下面和右下再補上矩陣,然後枚舉全部的子矩形來求最大的和,枚舉時先枚舉矩形的左上點,再枚舉所有的長和寬 #include <cstdio

原创 uva 10003 切木棍

uva 10003 #include<stdio.h> #include<string.h> int n,a[55]; int dp[51][51]; int DP(int i,int j) { if(dp[i][j]!=-1)