摘要:
LIS的简化版。#include<iostream>
using namespace std;
const int N=30005;
int n;
int data[N];
int stack[N];
int sp;
inline void insert(int dat)
{ int head=1,tail=sp-1; int mid; while(head<tail) { mid=(head+tail)/2; if(stack[mid]<=dat) { head=mid+1; } else { tail=mid; } } stack[hea... 阅读全文
posted @ 2011-11-26 23:33
不是我干的
阅读(138)
评论(0)
推荐(0)
摘要:
题意:一群匪徒要进入一个酒店。酒店的门有k+1个状态,每个匪徒的参数是:进入时间,符合的状态,携带的钱。酒店的门刚开始状态0,问最多这个酒店能得到的钱数。思路:dp数组为DP[T][K].转移方程dp[i][j]=max(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1])因为转移i只跟i-1有关,所以可以用滚动数组dp[2][k].其实这道题的转移方程很容易想到,只是编程的时候处理边界等细节比较麻烦。#include<iostream>
#include<algorithm>
#define max(a,b) (a>b?a:b)
using 阅读全文
posted @ 2011-11-26 19:42
不是我干的
阅读(166)
评论(0)
推荐(0)
摘要:
题意:裸的最长上升子序列。思路:传统的O(N^2)的DP没法过。用O(NLOGN)的贪心方法过。#include<iostream>
using namespace std;
const int N=100005;
int n;
int stack[N];
int sp;
void insert(int t)
{ int head=1; int tail=sp-1; int mid; while(head<tail) { mid=(head+tail)/2; if(stack[mid]<t) { head=mid+1; } else { tail=... 阅读全文
posted @ 2011-11-26 16:33
不是我干的
阅读(178)
评论(0)
推荐(0)
摘要:
巨水的dp。思路很简单:每次dp[i]都是和dp[i-1]时候的0的个数和1的个数有关而已。打表之后发现是斐波那契数列。。。。。。#include<iostream>
using namespace std;
const int N=50;
long long int dp[N];
int n;
void solve()
{ dp[1]=2; long long a=1,b=1; for(int i=2;i<=45;i++) { long long tmp=a+b; b=a; a=tmp; dp[i]=a+b; }
}
int main()
{ solve... 阅读全文
posted @ 2011-11-26 14:04
不是我干的
阅读(134)
评论(0)
推荐(0)
浙公网安备 33010602011771号