2011年2月27日

poj 1948

摘要: 题意:给定n根长度的木棍,求围成的三角形中面积最大的那个。找好状态就好办。dp[i][j][k]=dp[i-1][j][k]||dp[i][j-a[i]][k]||dp[i][j][k-a[i]];dp[i][j][k]表示前i跟木棒可构成长度j,与长度k。代码:#include<iostream>#include<fstream>#include<cmath>using namespace std;int n;int a[41];bool dp[41][1000][1000];int sum=0;int ok(int s,int t,int k){ dou 阅读全文

posted @ 2011-02-27 18:32 宇宙吾心 阅读(379) 评论(0) 推荐(0)

poj 2033

摘要: 题意:求解码方案个数。注意细节。如10,20只有一种解码方案,22有两种。代码:#include<iostream>#include<fstream>using namespace std;long long dp[1000001];int n;void read(){// ifstream cin("in.txt"); int i,j,k; char c[1000001]; while(1){ cin>>c; n=strlen(c); if(strcmp(c,"0")==0) return; memset(dp,0, 阅读全文

posted @ 2011-02-27 15:16 宇宙吾心 阅读(367) 评论(0) 推荐(0)

poj 1972

摘要: 少人做的水题。直接模拟即可,不算dp题。代码:#include<iostream>#include<fstream>using namespace std;int a[10001][7];int n;int ok(int s,int t){ int i=0; if(t==1) { i=max(a[s][2],i); i=max(a[s][3],i); i=max(a[s][4],i); i=max(a[s][5],i); } else if(t==2){ i=max(a[s][1],i); i=max(a[s][3],i); i=max(a[s][6],i); i=ma 阅读全文

posted @ 2011-02-27 14:42 宇宙吾心 阅读(281) 评论(0) 推荐(0)

poj 1260

摘要: 题意:要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,及如果买价值为1的珍珠100颗,必须付的钱数为110。一颗珍珠可以用比它贵的珍珠充数,因此买多种珍珠的时候用贵的代替便宜的可能更省钱。例如买100颗价值为2的、1颗价值为1的,此时买101颗价值为2的为较优方案。输入要买的若干种珍珠,可用高价珍珠充数的条件下,问最少需要花费多少钱。经典dp:高档次的珍珠若要和低档次的珍珠合并,那么这些低档次的珍珠必须是和它紧邻的,也就是说,它只有和第i-1,i―2,…,i-j 类珍珠合并,同时这种合并必须是连续的。用sum[i] 记录前 i 类珍珠的总数。推出状态转移方程:dp[i] = m 阅读全文

posted @ 2011-02-27 13:51 宇宙吾心 阅读(365) 评论(0) 推荐(0)

poj 3459

摘要: 题意:题目大意是说n个人做m项工程,然后给出工人的薪水,和工程按期完工的概率,以及按时完工的酬劳和未按时完工的罚款,要求出最大利润。。需要注意的是,薪水输出的是欧元为单位,输出的是以分为单位。(number是数量的意思,也即给出的是若干个人做同一个工程完工的概率)刚开始题意理解错了,咳。dp[i][j]=dp[i-1][j-k]+cost[i][k];dp[i][j]表示i个工程用j个人的最大收益。(注意搭配dp[i][j]可能为负数,因此wa一次)#include<iostream>#include<fstream>using namespace std;int m, 阅读全文

posted @ 2011-02-27 11:29 宇宙吾心 阅读(377) 评论(0) 推荐(0)

导航