luogu p1799 數列_NOI導刊2010提高(06)
阿新 • • 發佈:2017-09-19
tps else return include .org 沒有 個數 ble 提高
原題鏈接
https://www.luogu.org/problem/show?pid=1799
我一開始覺得這個題真是玄學,直到我發現自己沒有寫max之後。。。(逃)
f[i][j]表示前i個刪了j個時的最優解,對於第i個數,如果前面刪去j個數時,能使a[i]==i,f[i][j]的值就會增加1;
但這樣是不是就是最大了呢,不一定。如果此時f[i-1][j-1]很大的話,f[i-1][j]+1仍然較小,此時就不如不刪除。
不管刪去j的數後能否使a[i]==i,f[i][j]都等於f[i-1][j-1]與f[i-1][j]的較大值。
代碼挺短的,但是就是忘寫max引發的血案。。。
#include<cstdio> intmax(int x,int y) { if(x>y) return x; else return y; } int n,ans,a[1005],f[1005][1005]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=0;j<i;j++) { if(a[i]==i-j) f[i][j]=max(f[i-1][j-1],f[i-1][j]+1);else f[i][j]=max(f[i-1][j-1],f[i-1][j]); } } for(int i=0;i<n;i++) ans=max(f[n][i],ans); printf("%d",ans); return 0; }
luogu p1799 數列_NOI導刊2010提高(06)