上一页 1 2 3 4 5 6 7 ··· 11 下一页
摘要: 真是一个好题啊,还是想了好几天而且还WA了两次…….令res[i][j]表示前i个COW,Si为j时Fi的最大值。res[i][j]=max(res[i-1][j-Fi[i]],res[i][j]); 因为res[i][]只与res[i-1][]有关空间复杂度省去一维,就像01背包那样。因为j可能为负值,因此我们可以将j设置一个偏移量MOVE。#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX 1234567890#define MOVE 100 阅读全文
posted @ 2012-06-08 09:55 书山有路,学海无涯 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 令res[i][j]表示前i个邮局负责前j个村庄的最小值。res[i][j]=res[i-1][k] + dist(k+1,j), (i<=j<=m,i-1<=k<j);#include<iostream>#include<cstdio>#include<cstring>using namespace std;int pos[301],res[35][301];#define MAX 1234567890int min(int a,int b){ return a < b ? a : b;}int dist(int i,int 阅读全文
posted @ 2012-05-31 20:40 书山有路,学海无涯 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 简单DP;状态转移方程如下:令len[i][j]表示串1前i个字符与串2前j个字符所得到的符合要求的串的最短长度。令res[i][j]表示串1前i个字符与串2前j个字符所得到的符合要求的最短串的方案数。len[i][j] = str1[i]==str2[j] ? len[i-1][j-1] +1: min(len[i-1][j],len[i][j-1])+1。若str1[i]==str2[j],res[i][j]=res[i-1][j-1];若 str1[i]!=str2[j] ,分三种情况:(1)len[i-1][j] < len[i][j-1] , res[i][j]=res[i-1 阅读全文
posted @ 2012-05-27 18:02 书山有路,学海无涯 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 简单DP#include<iostream>#include<cstdio>#include<cstring>using namespace std;char map[2][1410];int S[4][2][1410],s[4][2][1410],smax,Smax;int max(int a,int b){ return a > b ? a : b;}int work(int n,int e){ int i; for(i=1;i<=n;i++) { if(map[e][i]=='S') { if(map[1-e][i... 阅读全文
posted @ 2012-05-24 13:49 书山有路,学海无涯 阅读(179) 评论(0) 推荐(0) 编辑
摘要: #include<windows.h>#include<iostream.h>#include<stdio.h>HANDLE g_hProcess;DWORD dwGoalAddr[1024],count;int CompareAPage(DWORD dwBase,DWORD goal){ DWORD i; BYTE arBytes[4096]; if(!::ReadProcessMemory(g_hProcess,(LPVOID)dwBase,arBytes,4096,NULL)) { return FALSE; } DWORD * lpDw... 阅读全文
posted @ 2012-05-23 12:57 书山有路,学海无涯 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 查找进程中QQ进程并终止该进程#include<windows.h>#include<stdio.h>#include<tlhelp32.h>DWORD FindProcess(char * fileName)//查找进程{ PROCESSENTRY32 pe32={sizeof(PROCESSENTRY32)}; HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hSnapshot==INVALID_HANDLE_VALUE) { printf("获取进程快照失 阅读全文
posted @ 2012-05-23 10:40 书山有路,学海无涯 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 简单的01背包,关键是找路径,通过此题对01背包找路径有了更深的认识了。#include<iostream>#include<cstdio>#include<cstring>#include<stack>using namespace std;int res[100010],nPath[100010],father[100010],data[110];int work(int goal,int n){ int i,j; memset(res,0,sizeof(res)); memset(nPath,0,sizeof(nPath)); memset 阅读全文
posted @ 2012-05-23 10:22 书山有路,学海无涯 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 纠结了一天也没有想到怎么用DP来做,看了看大牛的想法顿时茅塞顿开:结果是要求从i到j需要多少天,假如用res[i][j]来表示,那么假如我们知道res[1][i]和res[1][j]的话,res[i][j]=res[1][j]-res[1][i] (i<=j),因此转化为求res[1][i]和res[1][j];而2的整数次幂可以直接求出若用r[i]表示res[1][2^i]的结果r[i]=2*r[i-1]+i-1;画一画就可以看得出来。然后根据r[i]的值递归求任何一个res[1][k],如何递归呢?拿个Res[1][11]来说吧:先找出大于11的最大2的整数次幂8;Res[1][11 阅读全文
posted @ 2012-05-21 17:44 书山有路,学海无涯 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题意:找出n的最小倍数,要求这个倍数十进制由1和2组成。看了discuss才知道确实可以用DP来做:令res[i][j]表示前i位对n取余为j是否可以得到。res[i][(10%n*j+1)%n]=res[i-1][j];res[i][(10%n*j+2)%n]=res[i-1][j];用到(a * b) % n=(a % n * b % n) % n;假如我们知道res[i][j]按照上面的公式顺着推很容易得到res[i+1][(10%n*j+1)%n]和res[i+1][(10%n*j+2)%n]的值,但是逆着推就不容易了。不管怎么说还是和01背包一个性质的。但是,提交后MLE,由于找路径 阅读全文
posted @ 2012-05-19 21:30 书山有路,学海无涯 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 最小表示法: 初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:1、 str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。2、 str[i+k]<str[j+k],j变成j=j+k+1,i不变,然后继续往下比较。直到i或j大于串长,找较小者。说说我的疑惑吧: 用枚举方法我们很好理解,一某一点i为起点,不断查看以i后的点为起点的串是否小于以i为起点的串,这理解起来不难。我们假设以i点为起点的串为S1,以j点为起点的串S2,而用最小表示法的话,需要找的S1、S2第一个不相等 阅读全文
posted @ 2012-05-11 13:15 书山有路,学海无涯 阅读(2196) 评论(1) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 11 下一页