POJ 2948 DP,poj2948dp

來源:互聯網
上載者:User

POJ 2948 DP,poj2948dp


一個row*col的矩陣,每個格子內有兩種礦yeyenum和bloggium,並且知道它們在每個格子內的數量是多少。最北邊有bloggium的收集站,最西邊有 yeyenum 的收集站。現在要在這些格子上面安裝向北或者向西的傳送帶(每個格子自能裝一種)。問最多能採到多少礦。


DP,狀態轉移方程為

dp[i][j]=Max(dp[i][j-1]+suma[i][j],dp[i-1][j]+sumb[i][j]);

其中sumb[i][j]是第i行1到j列的需要到西邊的礦石的價值,suma[i][j]是第j列1到i行需要到最北邊的礦石的價值


#include "stdio.h"#include "string.h"int dp[510][510],suma[510][510],sumb[510][510],a[510][510],b[510][510];int Max(int a,int b ){    if (a<b) return b;else return a;}int main(){    int n,m,i,j;    while (scanf("%d%d",&n,&m)!=EOF)    {        if (n+m==0)break;        for (i=1;i<=n;i++)            for (j=1;j<=m;j++)            scanf("%d",&b[i][j]);        for (i=1;i<=n;i++)            for (j=1;j<=m;j++)            scanf("%d",&a[i][j]);        memset(suma,0,sizeof(suma));        memset(sumb,0,sizeof(sumb));        for (i=1;i<=n;i++)            for (j=1;j<=m;j++)            suma[i][j]=suma[i-1][j]+a[i][j];        for (j=1;j<=m;j++)            for (i=1;i<=n;i++)            sumb[i][j]=sumb[i][j-1]+b[i][j];        memset(dp,0,sizeof(dp));        for (i=1;i<=n;i++)            for (j=1;j<=m;j++)            {                dp[i][j]=Max(dp[i][j-1]+suma[i][j],dp[i-1][j]+sumb[i][j]);            }        printf("%d\n",dp[n][m]);    }    return 0;}



POJ 1004 大牛幫忙看看為何是ANSWER WRONG把找不出來錯誤

把void main換成int main,main函數的括弧內的void刪掉,不用任何參數,最後還要加上return 0,用void main很容易出問題的,還有,最後那個printf那裡應該是%.2f,換了應該就可以了。如果還不行的話,就把全部float換成double,f換成lf
 
幫我看看POJ1458為何老WA?

改了,邏輯錯誤

/*
北京大學ACM-ICPC Online Judge,Pro.1458
LCS最長公用字串動態規划算法
*/
#include<cstdio>
#include<memory>
#include<cstdlib>
#define MAX(a,b) (a>b?a:b)
using namespace std;
const int maxLenth=1000;
char s1[maxLenth],s2[maxLenth];
int DP[maxLenth][maxLenth];
int LCS(char *,char *);
int main(int, char **)
{
//freopen("1458in.txt","r",stdin);
while (scanf("%s%s",s1,s2)>0)
{
printf("%d\n",LCS(s1,s2));
}
return 0;
}
int LCS(char *s1,char *s2)
{
int i, j;
int len1, len2;
memset(DP,0,sizeof(DP));
for (i=0;s1[i];i++)
for (j=0;s2[j];j++)
if (s1[i]==s2[j])
DP[i][j]=1;
len1=i;len2=j;
for (i=0;i<len1;i++)
for (j=0;j<len2;j++)
{
int temp1,temp2,temp3;
temp1=j>0?DP[i][j-1]:0;
temp2=i>0?DP[i-1][j]:0;
temp3=(i>0&&j>0)?DP[i-1][j-1]:0;
if(DP[i][j])
DP[i][j]=temp3+1;
else
DP[i][j]=MAX(temp1,temp2)+DP[i][j];
}
return DP[len1-1][len2-1];
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.