pku 1953 dp World Cup Noise 解题报告
2009-03-19 13:52
489 查看
一、题目:World Cup Noise
二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1953
三、错误解法:即是常规的解法,搜索在数组a中取a[i]与a[i+1]是否相等而且是==1的;
#include "stdio.h"
#include "string.h"
#define MAX 45
int LCS(int a[], int m)
{
int i;
for (i = 0; i < m; i++)
{
if (a[i] == a[i + 1])
{
if (a[i] == 1)
{
return 0;
}
}
}
return 1;
}
int main()
{
freopen("1.txt", "r", stdin);
int i, j;
int n, k, p;
int a[MAX];
int num = 0;
scanf("%d", &n);
for (k = 0; k < n; k++)
{
num++;
int count = 0;
scanf("%d", &i);
for (j = 0; j < i; j++)
{
a[j] = 0;
}
int sum = 2;
j = 1;
while (j < i)
{
sum *= 2;
j++;
}
for (j = 0; j < sum; j++)
{
count += LCS(a, i);
p = 0;
a[p] += 1;
while (p < i)
{
int temp1, temp2;
temp1 = a[p] % 2; //个位
temp2 = a[p] / 2; //进位
a[p] = temp1;
a[p + 1] += temp2;
p++;
}
}
printf("Scenario #%d:/n%d/n", num, count);
printf("/n");
}
return 0;
}
结果:Time Limit Exceeded
四、正确解法:
再一次认真看题目后,才发现是水货dp.其实就是斐波那契数。
#include "stdio.h"
int fibarr[45] = {0};
//用动态规划来求fibaar
int Memoized(int n)
{
int t;
if (fibarr
!= 0)
{
return fibarr
;
}
if (n == 1)
{
t = 2;
}
if (n == 2)
{
t = 3;
}
if (n > 2)
{
t = Memoized(n - 1) + Memoized(n - 2);
}
return fibarr
= t;
}
int main()
{
freopen("1.txt", "r", stdin);
int i;
int n, t, num, result;
scanf("%d", &n);
num = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &t);
result = Memoized(t);
printf("Scenario #%d:/n%d/n/n", num, result);
num++;
}
return 0;
}
结果:
二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1953
三、错误解法:即是常规的解法,搜索在数组a中取a[i]与a[i+1]是否相等而且是==1的;
#include "stdio.h"
#include "string.h"
#define MAX 45
int LCS(int a[], int m)
{
int i;
for (i = 0; i < m; i++)
{
if (a[i] == a[i + 1])
{
if (a[i] == 1)
{
return 0;
}
}
}
return 1;
}
int main()
{
freopen("1.txt", "r", stdin);
int i, j;
int n, k, p;
int a[MAX];
int num = 0;
scanf("%d", &n);
for (k = 0; k < n; k++)
{
num++;
int count = 0;
scanf("%d", &i);
for (j = 0; j < i; j++)
{
a[j] = 0;
}
int sum = 2;
j = 1;
while (j < i)
{
sum *= 2;
j++;
}
for (j = 0; j < sum; j++)
{
count += LCS(a, i);
p = 0;
a[p] += 1;
while (p < i)
{
int temp1, temp2;
temp1 = a[p] % 2; //个位
temp2 = a[p] / 2; //进位
a[p] = temp1;
a[p + 1] += temp2;
p++;
}
}
printf("Scenario #%d:/n%d/n", num, count);
printf("/n");
}
return 0;
}
结果:Time Limit Exceeded
四、正确解法:
再一次认真看题目后,才发现是水货dp.其实就是斐波那契数。
#include "stdio.h"
int fibarr[45] = {0};
//用动态规划来求fibaar
int Memoized(int n)
{
int t;
if (fibarr
!= 0)
{
return fibarr
;
}
if (n == 1)
{
t = 2;
}
if (n == 2)
{
t = 3;
}
if (n > 2)
{
t = Memoized(n - 1) + Memoized(n - 2);
}
return fibarr
= t;
}
int main()
{
freopen("1.txt", "r", stdin);
int i;
int n, t, num, result;
scanf("%d", &n);
num = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &t);
result = Memoized(t);
printf("Scenario #%d:/n%d/n/n", num, result);
num++;
}
return 0;
}
结果:
Accepted | 196K | 0MS |
相关文章推荐
- Poj 1953 World Cup Noise之解题报告
- pku 1953 World Cup Noise(DP)
- pku 1953 -- World Cup Noise (DP)
- pku1953---World Cup Noise(不允许有相邻的1,很简单的推导哦)
- poj - 1953 - World Cup Noise(dp)
- poj - 1953 - World Cup Noise(dp)
- (POJ1953)World Cup Noise(dp)
- poj 1953 World Cup Noise(DP)
- Pku1953 World Cup Noise (动态归划) 不含相邻1的2进制数
- POJ 1953 World Cup Noise(数位DP 01串)
- poj 动态规划DP - 1953 World Cup Noise
- pku 2392 space elevator 多重背包 dp 解题报告
- pku_2054 dp Color a tree dp 解题报告
- Pku acm 1953 World Cup Noise 动态规划题目解题报告(四)
- PKUOJ1593 World Cup Noise
- pku 树形dp 1849 two 解题报告
- pku 2287 TianJi -- The Horse Racing 贪婪的dp 解题报告
- POJ 1953 World Cup Noise
- poj 1953 World Cup Noise
- pku 1947 Rebuilding Roads 树形dp 解题报告